我想知道如何使用NSIS从C ++可执行文件调用函数。
我正在使用以下方法,但未调用该函数。
!include LogicLib.nsh
Section
SetOutPath $INSTDIR
File E:\TestNullSoft\DataLauncher.exe
File E:\TestNullSoft\Profile.dll
System::Call 'KERNEL32::AddDllDirectory(w "$INSTDIR")'
System::Call "$INSTDIR\DataLauncher.exe:ApplicationDataCollection() i.r0"
Pop $1 ;
${If} $0 = 0
MessageBox MB_OK "Function is NOT CALLED" IDOK
${EndIf}
SectionEnd
AddDllDirectory函数在C ++项目中声明,如下所示:
DataCollectionLauncher.cpp
功能声明:
void ApplicationDataCollection();
**Function Definition:**
void ApplicationDataCollection()
{
MessageBox(NULL, _T("Test data collection"), _T("Test"), MB_OK);
}
但是之前我曾经从DLL调用C ++函数,如下所示,并且可以正常工作:
System::Call "$INSTDIR\Display.dll:IsAppToDisplay() i.r0"
C ++代码如下所示:
extern "C" DLLEXPORT BOOL IsAppToDisplay()
{
MessageBox(NULL, _T("Test"), _T("Test Display"), MB_OK);
return bRetValue;
}
答案 0 :(得分:0)
您不能调用.EXE文件中的函数,只能调用.DLL文件。
具体来说,System::Call
将调用LoadLibrary
,GetProcAddress
和LoadLibrary
无法加载.EXE。