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)),我认为这是导致 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 回答