1

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 関数自体は正常にコンパイルされますが、2 番目の関数はコンパイルされません。

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に移動したいと思います。

ここで何が問題なのかを理解するのを手伝ってください。

4

2 に答える 2

2

「Comctl32.lib」(「commdlg32.lib」ではない) は、この関数が「存在する」場所です。

MSDN を参照してください: http://msdn.microsoft.com/en-us/library/windows/desktop/bb776403(v=vs.85).aspx

于 2012-05-31T18:49:46.840 に答える
1

に対してリンクを試みましたComctl32.libか?

MSDNページには、関数が配置されているライブラリであると書かれています。

プロジェクト設定 -> リンカー -> 入力 -> 追加の依存関係に移動し、そこに追加Comctl132.libします。

于 2012-05-31T18:49:08.320 に答える