我有一个尝试在 VS2010 Express 中编译的简单 DLL。DLL的代码如下:
#pragma comment(linker, "/EXPORT:PlusOne=_PlusOne@4")
#include <windows.h>
#include <commctrl.h>
extern "C" __declspec(dllexport) int PlusOne(int inNum)
{
inNum++;
return inNum;
};
extern "C" __declspec(dllexport) LRESULT CALLBACK OwnerDrawButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
//further processing will go here
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
};
__stdcall 在项目选项中被选中
plusOne 函数本身编译得很好,但第二个函数不能。
DefSubclassProc 在 commctrl.h 中声明,但我在函数上收到错误,包括搜索的库(包括该函数所在的 commdlg32)的完整错误文本如下:
1> Searching libraries
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\winmm.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1> Searching C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1> Searching c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\MSVCRT.lib:
1> Searching c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>
1> Finished searching libraries
1>dlltest.obj : error LNK2001: unresolved external symbol _DefSubclassProc@16
1>s:\documents\my documents\visual studio 2010\Projects\dlltest\Release\dlltest.dll : fatal error LNK1120: 1 unresolved externals
看起来它找不到函数,但库和头文件存在,所以我不明白为什么。
顺便说一句,代码的动机是我在 vba 中子类化一个窗口,但是在 vba 中拥有 windowprocedure 非常不稳定,所以我想尝试将它移动到一个 dll 中。
请帮助我了解这里出了什么问题。