0

私は3つの関数をエクスポートするdllを持っています:

.h ファイル

extern "C"
{
__declspec(dllexport) BOOLEAN __stdcall InitializeChangeNotify(void);
__declspec(dllexport) BOOLEAN __stdcall PasswordFilter(LPCWSTR AccountName,LPCWSTR FullName,LPCWSTR Password,BOOLEAN SetOperation);
__declspec(dllexport) NTSTATUS __stdcall PasswordChangeNotify(LPCWSTR UserName,ULONG RelativeId,LPCWSTR NewPassword);
}

.c ファイル

extern "C"
{
    __declspec(dllexport) BOOLEAN __stdcall InitializeChangeNotify(void)
{
    writeToLog("InitializeChangeNotify()");
    return TRUE;
}

__declspec(dllexport) BOOLEAN __stdcall PasswordFilter(LPCWSTR AccountName,LPCWSTR FullName,LPCWSTR Password,BOOLEAN SetOperation)
{
    writeToLog("PasswordFilter()");
    return TRUE;
}

__declspec(dllexport) NTSTATUS __stdcall PasswordChangeNotify(LPCWSTR UserName,ULONG RelativeId,LPCWSTR NewPassword)
{
    writeToLog("PasswordChangeNotify()");
    return 0;
}
}

私はVS 2010でコンパイルします。

関数名は次のように依存しています: _InitializeChangeNotify@0, _PasswordChangeNotify@12. 関数を分解するにはどうすればよいですか?

4

3 に答える 3

5

undname.exeWindows では ' c++filt' に相当するようです。

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\undname.exe"PCの下に置いています。

ページから、

undname.exe を使用して、装飾された名前を装飾されていない形式に変換できます。例えば、

C:\>undname ?func1@a@@AAEXH@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation 1981-2000. All rights reserved.Undecoration
of :- "?func1@a@@AAEXH@Z"
is :- "private: void __thiscall a::func1(int)"
于 2012-05-04T22:39:12.317 に答える
1

_xxx@x は、これが __stdcall 呼び出し規約であることを意味します。@ の後の数字は、引数の要約サイズ (バイト単位) を意味します。

于 2012-05-04T21:53:10.310 に答える
0

私もこれに遭遇し、defファイルを指定して解決しました。例えば:

a.def:

輸出

InitializeChangeNotify

プロジェクト設定でLink>>入力>>モジュール定義ファイルをa.defにしてリビルド。HTH

于 2014-12-06T15:55:18.727 に答える