2012-04-16 11 views
1

私のVisual Studio 2010には2つのプロジェクトがあります。 1つは静的なlib(誰かが尋ねるならmhook 2.3)で、もう1つはDLLです。どちらも/ MTとしてコンパイルするように設定されています。1シンボルが見つかりました。他の「未解決の外部シンボル」

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

DLLプロジェクトがmhookプロジェクトを参照し、Mhook_SetHookとMhook_Unhookの両方を使用しています。

mhookプロジェクトは、そのmhook.hで2つの機能があります。同じmhook.hが使用されます。リンクが正常にMhook_SetHookを見つけたこと、

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

注:私はDLLプロジェクトをコンパイルすると、私は次のエラーを取得します。 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++と私のプログラムにあった私は、この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 
関連する問題