我在 msdn 中看到许多页面解释了如何使用 msbuild 从命令行构建 C++ 项目。但是是否可以使用 msbuild 从另一个 C++ 项目的代码中构建 C++ 项目?
更具体地说:在 C++ 解决方案中,我有 2 个项目(exe、dll)。是否可以通过 msbuild 在运行时从 exe 项目构建 dll 项目,然后加载 dll 并调用 dll 的函数之一?
我需要这个,因为我需要在运行时更改 dll 项目的代码、构建它并在运行时调用它的函数。
任何帮助将不胜感激。
我在 msdn 中看到许多页面解释了如何使用 msbuild 从命令行构建 C++ 项目。但是是否可以使用 msbuild 从另一个 C++ 项目的代码中构建 C++ 项目?
更具体地说:在 C++ 解决方案中,我有 2 个项目(exe、dll)。是否可以通过 msbuild 在运行时从 exe 项目构建 dll 项目,然后加载 dll 并调用 dll 的函数之一?
我需要这个,因为我需要在运行时更改 dll 项目的代码、构建它并在运行时调用它的函数。
任何帮助将不胜感激。
只需调用 CreateProcess,例如(使用 msbuild 4):
#include <windows.h>
#include <string>
#include <iostream>
bool RunMsBuild( const char* args )
{
STARTUPINFO startupInfo;
PROCESS_INFORMATION procInfo;
memset( &startupInfo, 0, sizeof( startupInfo ) );
memset( &procInfo, 0, sizeof( procInfo ) );
std::string cmdLine( "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe " );
cmdLine += args;
if( !CreateProcessA( 0, const_cast< char* >( cmdLine.c_str() ),
0, 0, FALSE, 0, 0, 0, &startupInfo, &procInfo ) )
return false;
WaitForSingleObject( procInfo.hProcess, INFINITE );
DWORD dwExitCode;
GetExitCodeProcess( procInfo.hProcess, &dwExitCode );
CloseHandle( procInfo.hProcess );
CloseHandle( procInfo.hThread );
return dwExitCode == 0;
}
int main()
{
if( RunMsBuild( "full\\path\\to\\ptojectfile /t:Build" ) )
std::cout << "ok";
else
std::cout << "not ok";
std::endl;
}