2012-04-16 47 views
1

在我的Visual Studio 2010中有2個項目。一個是靜態庫(如果有人問了,mhook 2.3),另一個是DLL。兩者都被設置爲編譯爲/ MT。找到一個符號,並找到其他「未解析的外部符號」

mhook項目在其mhook.h兩個功能:

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  | [email protected]@[email protected] (i 
nt __cdecl Mhook_SetHook(void * *,void *)) 
122 00000000 SECT3B notype() External  | [email protected]@[email protected] (int _ 
_cdecl Mhook_Unhook(void * *)) 
> 

我迷失和困惑,請大家幫忙。

回答

1

答: 我顯然混合使用C++和C代碼 - 手頭的圖書館在C++和我的程序C.

我不得不添加外部C周圍,從這個Using C++ library in C code收集:

#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