Указатель VARIANT повреждается при передаче в качестве параметра функции в другую сборку (C ++ DLL) - PullRequest
0 голосов
/ 26 сентября 2018

Я не совсем уверен, как объяснить мою проблему здесь, но постараюсь, чтобы вы поняли.

Есть 2 сценария,

  1. Приложение C # -> CPPDLL1 -> CPPDLL2 -> CPPDLL3.
  2. Приложение 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

...