我在我的代码中有一堆Console.WriteLines,我可以在运行时观察到.我与我也写过的本地库进行通信.
我想在本地库中粘贴一些printf并观察它们.但是我没有在运行时看到它们.
我创建了一个令人费解的hello world应用程序来演示我的问题.当应用程序运行时,我可以调试到本机库并看到调用hello world.输出永远不会落在文本作者身上.请注意,如果相同的代码作为控制台应用程序运行,那么一切正常.
C#:
[DllImport("native.dll")]
static extern void Test();
StreamWriter writer;
public Form1()
{
InitializeComponent();
writer = new StreamWriter(@"c:\output.txt");
writer.AutoFlush = true;
System.Console.SetOut(writer);
}
private void button1_Click(object sender, EventArgs e)
{
Test();
}
Run Code Online (Sandbox Code Playgroud)
和原生部分:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
更新:下面的hamishmcn开始讨论调试/发布版本.我在上面的button1_click
方法中删除了本机调用,只是用标准的Console.WriteLine
.net调用替换它.当我在调试模式下编译并运行它时,消息被重定向到输出文件.当我切换到释放模式时,呼叫没有被重定向.控制台重定向似乎只在调试模式下工作.我该如何解决这个问题?