正在将C++printf重定向到C#
Redirecting C++ printf to C#
我目前有以下设置:
- 应用程序(可执行文件)
- C++DLL(包含可执行文件使用的逻辑并加载C#DLL,暂时有一个控制台窗口用于调试)
- C#DLL(包含GUI)
C#DLL使用一个名为UnmanagedExports的nuget包来向C++提供函数。方法CCD_ 1由C#提供。使用LoadLibrary()
加载C#DLL,并且ShowGui()
方法正常工作。然而,我似乎很难理解如何实现一个允许C++向C#发送消息的函数。目前,我提出了以下内容:
[DllExport("AddDebug")]
public static void AddDebug([MarshalAs(UnmanagedType.LPStr)]StringBuilder s)
{
guiMain.AddToTextbox(s.ToString()); // the GUI uses BeginInvoke to prevent cross-thread exceptions.
}
在C++中,我只是简单地将printf()
更改为AddDebug()
,这似乎只起了一半的作用:在某个时刻,C++DLL在尝试调用AddDebug()时被阻塞,并且没有响应。
我在C++中使用了以下内容进行调试(显然调用sendDebug
而不是AddDebug
):
sendDebug(string s)
{
cout << s;
AddDebug(s);
cout << s;
}
在C++阻塞的场景中,上面的代码只显示string s
一次,C#从不显示。意味着AddDebug()
永远不会完成。
我尝试过寻找解决方案,但似乎没有按照我想要的方式工作。更改为完整的C#解决方案不是一个选择,因为C++代码太大了,"转换"需要太多时间。
我希望我的问题很清楚,也许有人建议我不要拔头发。提前谢谢。
最终我实现了一个命名管道。C#是服务器,C++是客户端。似乎工作没有任何问题。
相关文章:
- 如何将stdout重定向到stderr
- 编写时C++中的输入重定向问题
- 获取通过重定向传入的输入文件的名称?
- Windows C++重定向库
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 使用 dup2() 进行输入重定向
- 将 clangd stderr 重定向到文件而不是控制台
- 如何在C++中获取重定向网页的URL
- 将标准输出重定向到ostream
- 如何撤消此代码上的 cin 重定向?
- 使用重定向标准处理子进程中的 kbhit
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 重定向输入和输出时如何处理主文件I/O?
- 如何将 printf 流输出重定向到.csv文件
- 将CUDA PRINTF重定向到C 流
- 如何在窗口中重定向 std::cout 和 printf
- 如何将C/C++printf()消息重定向到windows电话日志系统
- 正在将C++printf重定向到C#
- 将 printf C++控制台输出重定向到 C#
- 将 printf 和 cout 重定向到套接字