У меня есть куча Console.WriteLines в моем коде, которые я могу наблюдать во время выполнения. Я общаюсь с родной библиотекой, которую я тоже написал.
Я бы хотел вставить некоторые printf в нативную библиотеку и посмотреть их тоже. Я не вижу их во время выполнения, однако.
Я создал приложение «Привет, мир!», Чтобы продемонстрировать свою проблему. Когда приложение запускается, я могу выполнить отладку в нативной библиотеке и увидеть, что 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();
}
и родная часть:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Обновление:
Хамишмин ниже начал говорить о сборках отладки / выпуска. Я удалил собственный вызов в вышеупомянутом методе button1_click
и просто заменил его стандартным вызовом Console.WriteLine
.net. Когда я скомпилировал и запустил это в режиме отладки, сообщения были перенаправлены в выходной файл. Когда я переключился в режим выпуска, однако, звонки не были перенаправлены. Перенаправление консоли работает только в режиме отладки. Как мне обойти это?