मेरे पास कंसोल का एक गुच्छा है। मेरे कोड में राइटलाइन जो मैं रनटाइम पर देख सकता हूं। मैं एक मूल पुस्तकालय के साथ संवाद करता हूं जिसे मैंने भी लिखा था।कंसोल के साथ समस्याएं। रिलीज मोड में सेटऑट?
मैं कुछ प्रिंटर को मूल पुस्तकालय में चिपकाना चाहता हूं और उन्हें भी देखना चाहता हूं। हालांकि मैं उन्हें रनटाइम पर नहीं देखता हूं।
मैंने अपनी समस्या का प्रदर्शन करने के लिए एक ठोस हैलो वर्ल्ड ऐप बनाया है। जब ऐप चलता है, तो मैं मूल पुस्तकालय में डीबग कर सकता हूं और देख सकता हूं कि हैलो वर्ल्ड को बुलाया जाता है। आउटपुट हालांकि टेक्स्टराइटर में कभी नहीं उतरता है। ध्यान दें कि यदि एक ही कोड कंसोल ऐप के रूप में चलाया जाता है तो सब कुछ ठीक काम करता है।
सी #:
[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");
}
अद्यतन: hamishmcn नीचे डिबग के बारे में बात करना शुरू कर दिया/रिलीज बनाता है। मैंने उपरोक्त button1_click
विधि में मूल कॉल हटा दिया और इसे मानक Console.WriteLine
.net कॉल के साथ बदल दिया। जब मैंने डीबग मोड में संकलित और इसे चलाया तो संदेशों को आउटपुट फ़ाइल पर रीडायरेक्ट कर दिया गया। जब मैंने रिलीज मोड में स्विच किया तो कॉल को रीडायरेक्ट नहीं किया गया था। कंसोल पुनर्निर्देशन केवल डीबग मोड में काम करता प्रतीत होता है। मैं इसके आसपास कैसे पहुंचू?
कोई जवाब नहीं, लेकिन यह पोस्ट http://stackoverflow.com/questions/2570001/allow-native-dll-to-output-stdout-stderr-in-c-console- एप्प्लिकेशन सुझाव देता है कि इसे ठीक काम करना चाहिए। हम्म। ऐसा लगता है जैसे stdout कहीं और पुनर्निर्देशित कर रहा है; या तो वह या यह buffered किया जा रहा है। –
आप मूल पुस्तकालय को कैसे लॉन्च/अटैच कर रहे हैं? – chilltemp
मैंने vs.net के माध्यम से प्रक्रिया से जुड़ा हुआ है और इसे कंसोल पर भी चलाने दिया है, और मुझे मूल stdout से कुछ भी दिखाई नहीं देता है। मैंने डीबीजीवीव की भी कोशिश की है जो मूल रूप से कुछ भी नहीं, केवल मेरे .net संदेशों को आउटपुट करता है। –