1

ここで msdn ドキュメントを使用しました: http://msdn.microsoft.com/en-us/library/f0fkfy9y(v=vs.100).aspx

そこでは次のように指定されています。

case dliNotePreLoadLibrary :
//If you want to return control to the helper, return 0.
//Otherwise, return your own HMODULE to be used by the 
//instead of having it call LoadLibrary itself

だから私は次のことを試しました:

FARPROC WINAPI delayHook(unsigned dliNotify, PDelayLoadInfo pdli)
{
    switch (dliNotify) {
        case dliStartProcessing :
        case dliNotePreGetProcAddress :
        case dliFailLoadLib :
        case dliFailGetProc :
        case dliNoteEndProcessing : 
          return 0;
          break;
        case dliNotePreLoadLibrary :
            {
                char* dllPath = getDllPath();
                HMODULE lib = LoadLibrary(dllPath);
                return lib;
            }
            break;      
        default :
            return NULL;
    }
    return NULL;
}

HMODULE を返すとエラーが発生します。

'return' : 'HMODULE' から 'FARPROC' に変換できません。

何が問題ですか?私は何か疲れていますか?彼らはあなた自身のHMODULEを返すと言います、そしてそれは私がしたことです...

4

2 に答える 2

1

LoadLibrary()を返しますHMODULE。関数delayHook()は を返しますFARPROC。そのため、戻り値に不一致があります。HMODULEによって返されたものを本当に返したいと仮定すると、次LoadLibrary()のようなキャストを使用することができますreinterpret_cast

case dliNotePreLoadLibrary :
{
    char* dllPath = getDllPath();
    HMODULE lib = LoadLibrary(dllPath);
    return reinterpret_cast<FARPROC>(lib);
}

補足: 今日の世界では、ANSI/MBCS の代わりに Unicode を使用するdllPath必要がありconst wchar_t*ます。CStringstd::wstring

于 2012-10-18T10:28:28.357 に答える
0

したがって、単純に次のようにキャストする必要がありますFARPROC

return (FARPROC)lib;
于 2012-10-18T10:27:47.183 に答える