我想知道如何使用NSIS

时间:2019-01-17 15:26:20

标签: nsis

我想知道如何使用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;
}

1 个答案:

答案 0 :(得分:0)

您不能调用.EXE文件中的函数,只能调用.DLL文件。

具体来说,System::Call将调用LoadLibraryGetProcAddressLoadLibrary无法加载.EXE。