作为函数参数传递给不同程序集(C ++ DLL)时,VARIANT指针损坏

时间:2018-09-26 12:09:36

标签: c# c++ dll variant

我不太确定如何在这里解释我的问题,但会尽力让您理解。

有2种情况

  1. C#应用程序-> CPPDLL1-> CPPDLL2-> CPPDLL3。
  2. VB6应用程序-> CPPDLL1-> CPPDLL2-> CPPDLL3。

方案1:

有一个c#应用程序,它加载一个c ++ dll(CPPDLL1),该c ++ dll(CPPDLL2)依次加载另一个c ++ dll(CPPDLL2),该c ++ dll(CPPDLL3)又加载一个c ++ dll(CPPDLL3)。

此处在“ CPPDLL2”中创建一个SafeArray,并将其作为“ VARIANT Pointer”形式的函数参数传递给在“ CPPDLL3”中定义和公开的函数

这里的问题是当从函数调用到定义的执行到达时,此变体ptr会损坏。

方案2:

与方案1相同,但VB6应用程序代替了C#应用程序。 一切都很好,没有发现问题。


伪代码:

CPPDLL2.cpp

VARIANT OutPara;
SAFEARRAYBOUND saOutPara[]={1,0};

VariantInit(&OutPara);

OutPara.parray = SafeArrayCreate(VT_R8,1,saOutPara); 
CoCreateInstance();

FunctionDefinedInCPPDLL3(VARIANT *varInstance);

CPPDLL3.cpp

FunctionDefinedInCPPDLL3(VARIANT *varInstance)
{
//varInstance is corrupted
//Do your job;
}

对解决方案或建议的任何线索表示赞赏。

TIA

0 个答案:

没有答案