1

そこで、アプリケーションを含む Dll を作成したいと考えています。私のコード:

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    switch(ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
            StartApp();
            break;
    }

    return TRUE;
}

そして StartApp 関数:

void StartApp()
{   
    //some declartions
    iPtr->Start();
}

問題は、関数 Start() が連続ループ (while(true) のような sth) で実行されていることです。これが、dll が壊れて true を返さない原因であると思います。別のスレッドで実行しようとしましたが、これは機能しません。

だから私の質問は、dllを使用するにはどうすればよいですか?

DllMain が終了せず、TRUE を返さない場合、問題はありますか?

4

1 に答える 1

0

はい、ドキュメントに記載されているように、DllMain が返されないという問題があります。

When a DLL entry-point function is called because a process is loading, the function returns TRUE to indicate success. For processes using load-time linking, a return value of FALSE causes the process initialization to fail and the process terminates. For processes using run-time linking, a return value of FALSE causes the LoadLibrary or LoadLibraryEx function to return NULL, indicating failure. (The system immediately calls your entry-point function with DLL_PROCESS_DETACH and unloads the DLL.) The return value of the entry-point function is disregarded when the function is called for any other reason.

ソース

StartApp 関数のラッパー関数を作成し、dll を介して公開することができます。その後、エクスポートされた StartApp 関数を実行可能ファイルから呼び出すことができます (dll をロードした後)。ブロックされるため、必ず別のスレッドから呼び出してください。

于 2012-06-02T18:02:44.693 に答える