我有一个C++控制台Exe,它做了一些编程.现在我想编写一个C#GUI来完成C++ exe所做的一些编程.我想的方法很少,
构建C++/CLI DLL真的不是那么难.您基本上使用非托管C++代码,除了您定义了一个" public ref class",它承载您希望C#代码看到的函数.
你回来了什么样的数据?单个数字,数字矩阵,复杂对象?
更新:由于已经澄清"输出"是iostreams,这里有一个项目演示重定向cout到调用库的.NET应用程序.在现有重定向之后重定向clog或cerr仅需要少量额外的线条DllMain.
zip文件包含VS2010项目文件,但源代码也应该在2005或2008中使用.
iostreams捕获功能包含在以下代码中:
// compile this part without /clr
class capturebuf : public std::stringbuf
{
protected:
virtual int sync()
{
// ensure NUL termination
overflow(0);
// send to .NET trace listeners
loghelper(pbase());
// clear buffer
str(std::string());
return __super::sync();
}
};
BOOL WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)
{
static std::streambuf* origbuf;
static capturebuf* altbuf;
switch (_Reason)
{
case DLL_PROCESS_ATTACH:
origbuf = std::cout.rdbuf();
std::cout.rdbuf(altbuf = new capturebuf());
break;
case DLL_PROCESS_DETACH:
std::cout.rdbuf(origbuf);
delete altbuf;
break;
}
return TRUE;
}
// compile this helper function with /clr
void loghelper(char* msg) { Trace::Write(gcnew System::String(msg)); }
Run Code Online (Sandbox Code Playgroud)