我不太确定如何在这里解释我的问题,但会尽力让您理解。
有2种情况
方案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