Kodumda çalışma zamanında gözlemleyebileceğim bir dizi Console.WriteLines var. Yazdığım bir yerli kütüphaneyle iletişim kurarım.sorunları?
Bazı kitapçıkları yerel kitaplığa yapıştırmak ve bunlara da bakmak istiyorum. Ancak onları çalışma zamanında göremiyorum.
Sorunumu göstermek için sarhoş bir merhaba dünya uygulaması oluşturdum. Uygulama çalıştığında, yerel kitaplığa hata ayıklayabilir ve merhaba dünyasının çağrıldığını görebilirim. Çıktı, metin yazarı olmasına rağmen asla inmez. Aynı kod bir konsol uygulaması olarak çalıştırılıyorsa, her şeyin iyi çalıştığını unutmayın.
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();
}
ve yerli kısmı:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Güncelleme: hamishmcn aşağıda ayıklama hakkında konuşmaya başladı/bırakma oluşturur. Yerel çağrıyı yukarıdaki button1_click
yönteminde kaldırdım ve standart bir Console.WriteLine
.net çağrısı ile değiştirdim. Bunu hata ayıklama modunda derledim ve çalıştırdığımda iletiler çıktı dosyasına yönlendirildi. Serbest bırakma moduna geçtiğimde, aramalar yeniden yönlendirilmedi. Konsol yönlendirmesi yalnızca hata ayıklama modunda çalışır gibi görünüyor. Bunu nasıl halledebilirim?
Yanıt yok, ancak bu gönderi http://stackoverflow.com/questions/2570001/allow-native-dll-to-output-stdout-stderr-in-c-console-application, düzgün çalışması gerektiğini önerir. Hmm. Stdout'un başka bir yere yönlendirdiği anlaşılıyor; ya bu ya da tamponlu ediliyor. –
Yerel kitaplığı nasıl başlatıyorsunuz/ekliyorsunuz? – chilltemp
İşlemi vsnet üzerinden ekledim ve ayrıca konsolda çalışmasına izin verdim ve yerel stdout'tan bir şey göremiyorum. Ayrıca yerel bir şey çıkarmayan DbgView'ı da denedim, sadece .net mesajlarını. –