NSIS插件功能不被识别
我做了一个非常简单的NSIS插件,它有一个功能。我已经成功编译的Win32 DLL项目成DLL然后将其复制到该目录C:\ Program Files文件(x86)的\ NSIS \插件NSIS插件功能不被识别
我的问题:当我创建.nsi脚本调用一个函数从DLL我得到一个编译错误说无效的命令:tbox :: myFunction
我做错了什么? 我是否需要将tbox.lib文件复制到NSIS目录并创建tbox.nsh文件以包含?
我的DLL的名字是tbox.dll,我NSI脚本如下再下面是我的C++ DLL代码:
!include MUI2.nsh
!include WinMessages.nsh
Name "aa.nsi"
OutFile "aa.exe"
Caption "${^Name}"
ShowInstDetails show
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit
Section "Dummy"
MessageBox MB_ICONINFORMATION|MB_OKCANCEL "dvkjdkj"
tbox::myFunction "abc" "def"
SectionEnd
DLL代码:
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#pragma comment(lib, "msimg32.lib")
#include <commctrl.h>
#include "TransparentCheckbox.h"
#include "NSIS/pluginapi.h"
HINSTANCE g_hInstance;
HWND g_hwndParent;
unsigned int g_stringsize;
stack_t **g_stacktop;
TCHAR *g_variables;
// To work with Unicode version of NSIS, please use TCHAR-type functions for accessing the variables and the stack.
HWND __declspec(dllexport) myFunction(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra)
{
g_hwndParent=hwndParent;
EXDLL_INIT();
{
TCHAR buf[1024];
wsprintf(buf,TEXT("string_size=%d, variables=%s\n"), string_size, variables);
MessageBox(g_hwndParent,buf,0,MB_OK);
}
return g_hwndParent;
}
BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
{
g_hInstance = (HINSTANCE)hInst;
return TRUE;
}
Makensis列出了所有的插件和他们的在编译时导出函数。
如果您的插件没有列出,那么它不在正确的目录中或根本没有导出。如果已列出,但名称错误(tbox::_myFunction
或tbox::[email protected]
),则表明您有装饰问题。你可以尝试extern "C" HWND __declspec(dllexport) __cdecl myFunction(...
,如果这还不够,你可能需要一个.def文件。
您也可以看看与Dependency Walker出口...
感谢您的回复:它说我的函数名是“?myFunction @@ YAPAUHWND __ @@ PAU1 @ HPADPAPAU_stack_t @@ PAUextra_parameters @@@ Z”是否正确?没有使用DLL之前的工作 – 2012-07-11 06:24:23
不,它只需要显示函数名称... – Anders 2012-07-11 06:31:37
外部“C”的工作。谢谢你总是非常有帮助:D – 2012-07-11 09:14:24
如果要加载插件在当前脚本目录,使用这个命令:
!addplugindir "."
你能看到的导出函数从其他工具,如取决于? – leppie 2012-07-11 05:31:08
@leppie yes我可以看到函数和它的名字,但由于某种原因它有点奇怪吗?myFunction @@ YAPAUHWND __ @@ PAU1 @ HPADPAPAU_stack_t @@ PAUextra_parameters @@@ Z – 2012-07-11 06:26:12
您需要将它导出为C函数。给出的答案是正确的。使用'extern“C”'。 – leppie 2012-07-11 08:05:23