Winapi 动态卸载Dll 我已经尽力将注入的Dll从C++转换为D,并到达了我想要动态卸载DLL的时候,F7被按下。 在C++中,使用“代码> FRIELBARARYANDUITIONTHORY < /COD>很简单,让DLL卸载自己,但是在DDL中使用时,方法似乎不起作用。 在这里你可以看到工作C++代码: // Module.cpp void Module::QuitThread() { while (true) { // KeyPress if ((GetAsyncKeyState(VK_F7) & 0x8000) != 0) { break; } Sleep(1); } FreeLibraryAndExitThread(Module::_hDllModule, 0); }

Winapi 动态卸载Dll 我已经尽力将注入的Dll从C++转换为D,并到达了我想要动态卸载DLL的时候,F7被按下。 在C++中,使用“代码> FRIELBARARYANDUITIONTHORY < /COD>很简单,让DLL卸载自己,但是在DDL中使用时,方法似乎不起作用。 在这里你可以看到工作C++代码: // Module.cpp void Module::QuitThread() { while (true) { // KeyPress if ((GetAsyncKeyState(VK_F7) & 0x8000) != 0) { break; } Sleep(1); } FreeLibraryAndExitThread(Module::_hDllModule, 0); },winapi,dll,d,Winapi,Dll,D,我知道这是一种快速而肮脏的方式,但现在已经足够了。以下是D等价物: // module.d private void quitThread() { while (true) { // KeyPress if (GetAsyncKeyState(VK_F7) & 0x8000) { break; } Sleep(1); } FreeLibraryAndExitThread(_

我知道这是一种快速而肮脏的方式,但现在已经足够了。以下是D等价物:

// module.d
private void quitThread()
{
    while (true) {
        // KeyPress
        if (GetAsyncKeyState(VK_F7) & 0x8000) {
            break;
        }

        Sleep(1);
    }

    FreeLibraryAndExitThread(_hModule, 0);
}

这是预期的行为吗?如何卸载D Dll?

此代码中没有特定于D的内容。您可以在调用FreeLibrary之前尝试终止运行时。(
core.runtime.runtime.terminate();
)。调用
core.runtime.runtime.terminate()
FreeLibraryAndExitThread
导致主机进程崩溃之前。在D中编程的是主机还是dll?在DYou中编程的dll混淆了WinAPI和D。如果您有Win32 DLL句柄,则无论发生什么情况,都可以随时使用Win32 API卸载它。阅读D手册。