我有一个导出3个功能的dll:
extern "C"
{
__declspec(dllexport) BOOLEAN __stdcall InitializeChangeNotify(void);
__declspec(dllexport) BOOLEAN __stdcall PasswordFilter(LPCWSTR AccountName,LPCWSTR FullName,LPCWSTR Password,BOOLEAN SetOperation);
__declspec(dllexport) NTSTATUS __stdcall PasswordChangeNotify(LPCWSTR UserName,ULONG RelativeId,LPCWSTR NewPassword);
}
extern "C"
{
__declspec(dllexport) BOOLEAN __stdcall InitializeChangeNotify(void)
{
writeToLog("InitializeChangeNotify()");
return TRUE;
}
__declspec(dllexport) BOOLEAN __stdcall PasswordFilter(LPCWSTR AccountName,LPCWSTR FullName,LPCWSTR Password,BOOLEAN SetOperation)
{
writeToLog("PasswordFilter()");
return TRUE;
}
__declspec(dllexport) NTSTATUS __stdcall PasswordChangeNotify(LPCWSTR UserName,ULONG RelativeId,LPCWSTR NewPassword)
{
writeToLog("PasswordChangeNotify()");
return 0;
}
}
我在VS 2010中编译。
我看到函数名称取决于:_InitializeChangeNotify@0, _PasswordChangeNotify@12
。如何取消功能?
答案 0 :(得分:5)
在Windows上看起来undname.exe
似乎是“c++filt
”。
我在我的电脑中"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\undname.exe"
下了。
从页面
您可以使用undname.exe将装饰名称转换为未修饰的表单。例如,
C:\>undname ?func1@a@@AAEXH@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation 1981-2000. All rights reserved.Undecoration
of :- "?func1@a@@AAEXH@Z"
is :- "private: void __thiscall a::func1(int)"
答案 1 :(得分:1)
_xxx @ x表示这是__stdcall调用约定。数字后面的@ mean参数汇总大小,以字节为单位。
答案 2 :(得分:0)
我也遇到过这个问题,并通过指定一个def文件来解决它。 e.g:
EXPORTS
在项目设置中,设置链接>>输入>>模块定义文件到a.def 并重建。 HTH