Я не совсем уверен, как объяснить мою проблему здесь, но постараюсь, чтобы вы поняли.
Есть 2 сценария,
- Приложение C # -> CPPDLL1 -> CPPDLL2 -> CPPDLL3.
- Приложение VB6 -> CPPDLL1 -> CPPDLL2 -> CPPDLL3.
Сценарий 1:
Существует приложение ac #, которое загружаетc ++ dll (CPPDLL1), который, в свою очередь, загружает другую c ++ dll (CPPDLL2), которая, в свою очередь, загружает еще одну c ++ dll (CPPDLL3).
Здесь SafeArray создается в «CPPDLL2» и передается как параметр функции вформа «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