1

私の Visual Studio 2010 には 2 つのプロジェクトがあります。1 つは静的ライブラリ (mhook 2.3 という質問があれば) で、もう 1 つは DLL です。どちらも /MT としてコンパイルするように設定されています。

mhook プロジェクトには、mhook.h に 2 つの関数があります。

BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction);
BOOL Mhook_Unhook(PVOID *ppHookedFunction);

dll プロジェクトは mhook プロジェクトを参照し、Mhook_SetHook と Mhook_Unhook の両方を使用します。同じ mhook.h が使用されます。dll プロジェクトをコンパイルすると、次のエラーが発生します。

1>hookdll.obj : error LNK2001: unresolved external symbol _Mhook_Unhook

リンクが Mhook_SetHook を正常に検出したことに注意してください。Mhook_Unhook の使用をコメント アウトすると、プログラムは正常にコンパイルされます。

Dumpbin は、両方のシンボルが静的ライブラリに存在することを示唆しています。

>dumpbin /symbols mhook-test.lib|find "Mhook"
015 00000000 SECT4  notype ()    External     | ?Mhook_SetHook@@YAHPAPAXPAX@Z (i
nt __cdecl Mhook_SetHook(void * *,void *))
122 00000000 SECT3B notype ()    External     | ?Mhook_Unhook@@YAHPAPAX@Z (int _
_cdecl Mhook_Unhook(void * *))
>

迷って困っています、助けてください。

4

1 に答える 1

1

回答: どうやら C++ と C コードを混ぜていたようです。手元にあるライブラリは C++ で、私のプログラムは C でした。

このUsing C++ library in C codeから収集したように、extern C をその周りに追加する必要がありました。

#ifdef __cplusplus
extern "C" {
#endif
BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction);
BOOL Mhook_Unhook(PVOID *ppHookedFunction);
#ifdef __cplusplus
} // extern "C"
#endif

これを行うと、シンボル エクスポートの見栄えが良くなりました。

C:\Users\MACABRE\Documents\Visual Studio 2010\Projects\luahooker\Debug>dumpbin /
exports mhook.lib
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file mhook.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _Mhook_SetHook
                  _Mhook_Unhook
于 2012-04-17T06:16:25.747 に答える