Использование C ++ DLL в Installscript Custom Action

Привет сообщество Stackoverflow,

У меня проблемы с вызовом C ++ DLL в пользовательском действии Installscript. Проблема возникает, когда я пытаюсь вызвать мою DLL с параметрами. Изображение ошибки выглядит так:

  1. DLL вызывается с параметрами

  2. значения, параметры успешно обрабатываются в DLL (значения также успешно передаются)

  3. после успешного завершения метода DLL возвращаемое значение не передается, но установка завершается с ошибкой 1603.

Однако, если я вызываю тот же метод без параметров, все работает без проблем.

Не имеет значения, какие параметры или сколько параметров передаются. Как только передается только один параметр, установка завершается неудачно.

InstallScript:

prototype NUMBER DoSomeThing(HWND, STRING, INT);
prototype NUMBER MsiCppTest.DoSomethingInCpp(STRING, INT);
prototype NUMBER MsiCppTest.DoSomethingOtherInCpp();

function NUMBER DoSomething(hMSi, sText, nCount)
STRING sSupportDir;
NUMBER nSize, nResult, nValue;
begin
nSize = 256;
nValue = -1;
MsiGetProperty(hMSi, "SUPPORTDIR", sSupportDir, nSize);
nResult = UseDLL(sSupportDir ^ "MsiCppTest.dll");
if (nResult = 0) then
//does not work:
nValue = MsiCppTest.DoSomethingInCpp(sText, nCount);

//would work:
nValue = MsiCppTest.DoSomethingOtherInCpp();

UnUseDLL(sSupportDir ^ "MsiCppTest.dll");
endif;

return nValue;
end;

C ++ DLL:

int DoSomethingInCpp(LPCTSTR lpText, int nCount) {
//The ToDo function is executed successfully with the correct values
ToDo(lpText, nCount);
//As soon as the function is completed, the setup is aborted
return 123;
}

int DoSomethingOtherInCpp() {
//would work
ToDo();
return 321;
}

У кого-нибудь есть идея решить эту проблему?

1

Решение

Я немного увлечен точными симптомами и деталями, почему, но я подозреваю, что это может быть WINAPI / stdcall против Cdecl несоответствие соглашения о вызовах. Попробуйте добавить WINAPI или же STDCALL (или же __stdcall) к вашим объявлениям функций c ++, или cdecl к вашему прототипу InstallScript.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]