मैं सी ++ में लिखा गया इंजेक्शन। डीएल बना रहा हूं, और मैं नामित पाइप का उपयोग कर सी # ऐप के साथ संवाद करना चाहता हूं।नामित पाइप का उपयोग कर C++ .dll और C# ऐप के बीच संदेश कैसे भेजें?
अब, मैं सी # ऐप में System.IO.Pipe .NET कक्षाओं में निर्मित का उपयोग कर रहा हूं, और मैं सी ++ में नियमित कार्यों का उपयोग कर रहा हूं।
मुझे सी ++ में बहुत अधिक अनुभव नहीं है (पढ़ें: यह मेरा पहला सी ++ कोड है ..), मुझे सी # में अनुभव है।
ऐसा लगता है कि सर्वर और क्लाइंट के साथ कनेक्शन काम कर रहा है, केवल समस्या यह है कि संदेश भेजा जा रहा है। मैंने .dll सर्वर को बनाने की कोशिश की, सी # ऐप सर्वर, पाइप दिशा InOut (डुप्लेक्स) बनाने लेकिन कोई भी काम करने लगता है।
DWORD ServerCreate() // function to create the server and wait till it successfully creates it to return.
{
hPipe = CreateNamedPipe(pipename,//The unique pipe name. This string must have the following form: \\.\pipe\pipename
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT, //write and read and return right away
PIPE_UNLIMITED_INSTANCES,//The maximum number of instances that can be created for this pipe
4096 , // output time-out
4096 , // input time-out
0,//client time-out
NULL);
if(hPipe== INVALID_HANDLE_VALUE)
{
return 1;//failed
}
else
return 0;//success
}
void SendMsg(string msg)
{
DWORD cbWritten;
WriteFile(hPipe,msg.c_str(), msg.length()+1, &cbWritten,NULL);
}
void ProccesingPipeInstance()
{
while(ServerCreate() == 1)//if failed
{
Sleep(1000);
}
//if created success, wait to connect
ConnectNamedPipe(hPipe, NULL);
for(;;)
{
SendMsg("HI!");
if(ConnectNamedPipe(hPipe, NULL)==0)
if(GetLastError()==ERROR_NO_DATA)
{
DebugPrintA("previous closed,ERROR_NO_DATA");
DisconnectNamedPipe(hPipe);
ConnectNamedPipe(hPipe, NULL);
}
Sleep(1000);
}
और इस तरह सी # cliend:
static void Main(string[] args)
{
Console.WriteLine("Hello!");
using (var pipe = new NamedPipeClientStream(".", "HyprPipe", PipeDirection.In))
{
Console.WriteLine("Created Client!");
Console.Write("Connecting to pipe server in the .dll ...");
pipe.Connect();
Console.WriteLine("DONE!");
using (var pr = new StreamReader(pipe))
{
string t;
while ((t = pr.ReadLine()) != null)
{
Console.WriteLine("Message: {0}",t);
}
}
}
}
जब मैं .dll सर्वर है, जो सी # अनुप्रयोग के लिए संदेश भेजता करने की कोशिश की, कोड मैं का इस्तेमाल किया इस तरह था
मुझे लगता है कि सी # क्लाइंट .dll से जुड़ा हुआ है, लेकिन इसे कोई संदेश नहीं मिलेगा .. मैंने इसे दूसरी तरफ करने की कोशिश की, जैसा कि मैंने पहले कहा था, और सी # को संदेश भेजने की कोशिश कर रहा था। डीएलएल, जो उन्हें एक संदेश बॉक्स में दिखाएगा। .dll को इंजेक्शन दिया गया था और सी # सर्वर से कनेक्ट किया गया था, लेकिन जब इसे एक संदेश प्राप्त हुआ तो उसने उस एप्लिकेशन को क्रैश कर दिया जिस पर इसे इंजेक्शन दिया गया था।
कृपया मेरी मदद करो, या कैसे सी ++ और सी # अनुप्रयोग
ओह यार, आप बोल्ड में C++ pipenames के बीच मतभेद और ग # रखना चाहिए। जब तक मुझे आपका जवाब नहीं मिला तब तक मैंने HOURS समस्या निवारण को बर्बाद कर दिया। –
@BrianFairservice - हो गया :)। मुझे खुशी है कि इस पोस्ट ने मदद की! –