Как построить DLL во время выполнения?

описание проблемы

У меня есть приложение, которое загружает 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);
}

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

Другие вопросы по тегам