我正在尝试使用MSVS 2005(也尝试过MS visual C ++ toolkit 2003)构建NSIS插件,但是当我从NSIS调用导出的函数时,没有任何反应。
以下是用于说明问题的示例代码:
#include "stdafx.h"
#include <windows.h>
#include "nsis_ansi\pluginapi.h"
#define NSISFUNC(name) extern "C" void __declspec(dllexport) __cdecl name(HWND hWndParent, int string_size, char* variables, stack_t** stacktop, extra_parameters* extra)
NSISFUNC(Test)
{
MessageBox(0,"Test",0,0);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
我使用的是MSVS2005设置的默认选项。
我假设这个DLL无法找到某种动态依赖。
有没有人经历过这个?
非常感谢您的帮助,
谢谢!
答案 0 :(得分:3)
最常见的问题是链接到其中一个C运行时dll(msvcrt * .dll),您可以使用Dependency Walker检查导入。
因为NSIS在Win95上运行,所以我们根本不使用CRT,但是如果您的目标是Win98 +,那么您可以放弃链接到普通的msvcrt.dll(没有版本号)。这在VS 2003及更高版本中更难做到,因此使用/MT
或其他CRT选项通常会减少工作量。如果您愿意使用DDK / WDK而不是VS,那么您可以链接到普通的msvcrt.dll ......