이 작업은 직접 수행 할 수 없지만 수동으로 수행 할 수 있습니다. 매크로 (프로젝트 설정을 변경하는 것이 더 쉽다) 또는 외부 프로그램 (vcproj를 텍스트 또는 xml로 수정해야 함)으로 만들 수 있습니다. 외부의 C++ 구현쪽으로 생각이 기울고 의사 코드는 :
bool CanWriteDll(dll)
{
return FileOutputStream(dll).is_open();
}
void BuildProject(proj)
{
LaunchProcess("devenv /Build " + proj); //or "msbuild ..." if you will
}
string FindUniqueName(dll)
{
string name = Path(dll).NameWithoutExtension();
string ext = Path(dll).Extension();
string newname;
int i = 1;
for(; ;)
{
newname = name + ToString(i++) + ext;
if(!FileExists(newname))
return newname;
}
}
void ModifyTargetName(proj, newName)
{
Xml xml = OpenXmlFile(proj);
XmlNode node = xml.FindNode("Tool.VCLinkerTool.OutputFile");
node.SetValue("$(OutDir)\" + newName);
xml.WriteFile();
}
//main code
if(!CanWriteDll(dll))
ModifyTargetName(proj, FindUniqueName(dll));
BuildProject(project);
이 떨어져 과정은 당신이 DLL을 사용하여 응용 프로그램을 다시 시작하고 지금 MyProject1.dll를 사용하도록 지시해야하는 문제를 떠난다. 어쨌든 응용 프로그램을 닫아야하는 경우 먼저 닫은 다음 dll을 작성한 다음 다시여십시오. 다른 말로하면, Fredrik와 Chuck의 의견은 확실합니다 : 아마도 처음부터 이것을해서는 안됩니다.
왜 프로그램을 빌드 출력 폴더에서 dll로드할까요? –
잘 모르겠지만, 왜 그렇게하고 싶은지 확신 할 수 없습니다. dll이 다른 용도로 사용된다면 프로젝트의 출력 폴더가 아닌 다른 곳에 위치해야합니다. – Chuck