Hello Stackoverflow社区,
我在Installscript自定义操作中调用C ++ DLL时遇到问题。当我尝试使用参数调用DLL时出现问题。错误图片如下:
使用参数调用DLL
这些值,参数已在DLL中成功处理(这些值也已成功传输)
在DLL方法成功完成之后,没有传递任何返回值,但是安装失败,并出现错误1603。
但是,如果我调用不带参数的相同方法,那么一切都会正常进行。
传递哪些参数或传递多少参数无关紧要。只要传递一个参数,设置就会失败。
安装脚本:
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;
}
有人有解决此问题的想法吗?
答案 0 :(得分:0)
对于确切的症状和原因,我有些不满意,但是我怀疑这可能是WINAPI / stdcall与cdecl的调用约定不匹配。尝试将WINAPI
或STDCALL
(或__stdcall
)添加到c ++函数声明中,或将cdecl
添加到InstallScript原型中。