2012-01-22 1 views
0

残念ながら、なんらかの理由で私は見積もることができません。私は自分の内線番号を認識するためにwindbgを取得できませんでした。私の内線番号を認識するためにwindbgを取得できません

#ifndef EXPT_API 
#define EXPT_API __declspec(dllexport) 
#endif 

extern "C" EXPT_API HRESULT CALLBACK help(PDEBUG_CLIENT Client, PCSTR args) 
{ 
    IDebugControl* Control; 
    IDebugSymbols* Symbols; 

    DebugCreate(__uuidof(IDebugClient),(void **)&Client); 
    Client->QueryInterface(__uuidof(IDebugControl), (void **)&Control); 
    Client->QueryInterface(__uuidof(IDebugSymbols), (void **)&Symbols); 

    // TODO: Extension code goes here: 

    Control->Output(DEBUG_OUTPUT_NORMAL, "A sample help message."); 

    return S_OK; 
} 

それはすべて私がwindbgのから拡張子をロードしようとするたびに、私はこれを取得、しかし、罰金コンパイル:

!Extension.help 
No export help found 

私はIDA Proを無料に私の.dllをロードし、見そこには「ヘルプ」があります。私は何時間もこれを理解しようとしています。あなたが提供できるいかなる助力も非常に高く評価されるでしょう。どうもありがとう。

+1

あなたが依存してDLLを見たことがありますか?いくつかの呼び出し規約は、extern "C"でもわずかに名前を変更します。 – Benj

+0

大変ありがとうございます!あなたは素晴らしいです!私の "ヘルプ"を "_help @ 8"に変換しました。これを修正する方法はありますか? .defファイルはトリックを行うだろうか?ありがとう、そんなに!編集:これを答えに変換する場合は、私はそれを受諾しupvote:p – niemiro

+1

はい、.defファイルは通常、答えです。 – Benj

答えて

1

stdcall呼び出し規約を使用しているため、extern "C"でも名前のマングリングが発生する可能性があります。あなたがcdeclを使っていたなら、これは当てはまりません。 WinDBG拡張を書く標準的な方法に従っているならstdcallが必要な可能性があるので、名前のマングリングを回避する最も良い方法は.defファイルを使用することです。

機微に良い荒廃のために、この前の質問を参照してください:

__cdecl or __stdcall on Windows?

+0

本当にありがとうございました。 .defファイルが問題を競合して解決しました。また、あなたのリンクに感謝します。 __cdeclは関数名にアンダースコアを付けているように見えますが、私は多くのことを学びました。再度、感謝します! – niemiro

関連する問題