【问题标题】:How to build a DLL at runtime?如何在运行时构建 DLL?
【发布时间】:2017-03-11 01:22:59
【问题描述】:

问题描述

我有一个在运行时加载 dll 的应用程序。我想允许用户在应用程序运行时更改该 dll 中的代码。当用户单击应用程序中的“编译”按钮时,它将从 dll 中释放所有数据。释放 dll 后,应用程序将重建 dll。本质上作为一个 运行时编译的程序。

理想实施

void ReCompile()
{
    //hDLL contains dll that was already loaded.
    FreeLibrary(hDLL);

    //code to rebuild MyDll.DLL would go here.

    LPCWSTR dll = L"MyDll.dll";
    hDLL = LoadLibrary(dll);
}

这目前可行,我只需要知道如何通过代码重建 dll,这样感觉起来更加流畅和直观。

当前实施

void Free() 
{
    FreeLibrary(hDLL);
}

//I go into my other visual studio that's running and press the build button myself.

void ReloadDll()
{
    LPCWSTR dll = L"MyDll.dll";
    hDLL = LoadLibrary(dll);
}

【问题讨论】:

  • 在您的应用程序中包含编译器、链接器和构建工具。哦,还有一个编辑器,可能还有 IDE。
  • @RichardCritten 只需要将 C++ 项目构建成 dll。
  • 好吧,你可以直接调用 Visual Studio 的命令行来调用构建。
  • @TheUndeadFish 目前处于这一点,类似于“cl.exe /LD MyDll.cpp”。不过,我遇到了一个错误。我不确定如何告诉 cmd 提示符在哪里查找 dll 需要的文件。
  • 与其在 cl.exe 级别下工作,不如考虑研究如何调用一次构建整个项目。我相信这将是通过 devenv.exe(也可能是其他方式)。

标签: c++ dll build runtime compiled


【解决方案1】:

归功于 TheUndeadFish。

void ReCompile()
{
    //hDLL contains dll that was already loaded.
    FreeLibrary(hDLL);

    //my solution
    system("msbuild \"D:\\Neumont\\Imagine\\RenderEngine\\Imagine.sln\" /property:Configuration=Debug /property:platform=Win32 ");
    //general purpose
    system("msbuild <path to your sln> /property:Configuration=build /property:platform=YourPlatform");


    LPCWSTR dll = L"MyDll.dll";
    hDLL = LoadLibrary(dll);
}

您需要将 msbuild 路径添加到您的环境变量。我的位于 C:\Program Files (x86)\MSBuild\14.0\Bin。你可能需要运行 vcvars32.bat

在运行时构建 DLL 的视频https://youtu.be/mFSv0tf6Vwc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多