我有一個Win32 C++遊戲端項目,我想創建一個可以動態連接的C#進程。然後,C++進程可以將調試數據發送到C#進程,並且C#控制檯可以將調試命令發送到C++進程。我知道這可以做到,但我不知道該怎麼做。有人知道嗎?如何使C#控制檯實用程序附加到C++ exe?
回答
有很多的溝通方式跨進程。爲了您的目的,我建議您使用套接字在兩者之間進行通信,因爲如果您願意,這也可以讓您在機器之間進行通信;並且使用套接字的語義在兩種語言中都是相似的。
在C#端,您可以通過在System.Net.Sockets中使用Socket
或TcpClient
類來啓動套接字。此外,您可能會發現在C#過程中實現服務器/偵聽方面會更容易一些。
TcpClient Class @ MSDN
Socket Class @ MSDN
System.Net.Sockets Namespace @ MSDN
在C++側,則必須利用套接字的兩種手段,或者通過的WinSock功能或Unix/POSIX樣式的功能。
Getting Started with Winsock @ MSDN
注意,WSA****
功能是正式的WinSock功能,並select
/listen
/bind
/...
是傳統的Unix/POSIX風格的。您可以使用一套或另一套。
TCP套接字可能是你最好的選擇;但是你可能會發現UDP可以讓你更快上手。另外,你可能會用UDP多播做一些有趣的事情。如果您使用套接字,請不要忘記檢查您的防火牆設置。
其他可能的兩種溝通方式涉及您可能需要學習的不同數量的工作和領域知識。這裏有一個簡要的大綱與優點和缺點。
命名管道
優點:在同一臺機器上性能優良,容易用C來控制++。缺點:在機器邊界上難以使用。
COM應用服務器
優點:易於消耗在C#的一面。一旦創建,便可以在C++端進行擴展。
缺點:可能難以調試,並且向現有項目添加支持非常棘手。也容易出現COM註冊和調試頭痛的問題。很難學習跨機器和用戶會話邊界使用。
共享內存
優點:性能超羣,容易在C++來控制,適度容易在C#控制。
缺點:不能跨機器使用。儘管您可以爲每一方創建一個緩衝區,併爲緩衝區單向通信,但它們在共享緩衝區的過程中存在一些問題。如果您的應用程序之間的通信數量超過1:1,則這很難使用。
我正在做一些非常類似的事情,在我正在使用的其中一個項目中使用命名管道。儘管我沒有在實施方面努力,但它似乎很好地完成了這項工作。以下鏈接提供了一個很好的概述。
http://msdn.microsoft.com/en-us/library/aa365590(v=vs.85).aspx
- 1. c控制檯程序
- 2. C#控制檯應用程序
- 3. Visual Studio 2010通過「附加到進程」調試C++控制檯應用程序
- 4. 如何使用shell32.dll中從C++控制檯應用程序
- 5. 爲多個實例構建C#控制檯應用程序
- 6. 兩件事;控制檯應用程序運行沒有.exe和參數(C#控制檯應用程序)
- 7. 如何將C#控制檯應用程序作爲單個exe部署?
- 8. 控制檯應用程序發佈EXE
- 9. 如何在c#控制檯應用程序中使用參數?
- 10. 如何獲得控制檯的進程id在C#控制檯應用程序
- 11. 如何將C#控制檯應用程序移植到Windows Phone
- 12. 使用C#控制檯加載Javascript應用程序
- 13. 將狀態欄添加到C++控制檯應用程序
- 14. 將音樂文件添加到C++控制檯應用程序
- 15. 如何在控制檯程序中使用一行(C++)
- 16. C++控制檯應用程序MVC
- 17. C#控制檯應用程序 -
- 18. C#控制檯和Windows應用程序
- 19. C++控制檯應用程序
- 20. 控制檯應用程序幫助! C#
- 21. C#控制檯應用程序部署
- 22. 控制檯應用程序拖放「C#」
- 23. 運行C#控制檯應用程序
- 24. C#控制檯應用程序圖標
- 25. 在C#控制檯應用程序
- 26. C#無控制檯應用程序
- 27. C# - 在控制檯應用程序
- 28. 如何從Java程序連續輸入到EXE的控制檯?
- 29. 如何編譯使用PlaySound函數的C++控制檯應用程序?
- 30. C#控制一個控制檯進程
術語「附加」並不意味着什麼。使用標準的進程間通信機制。 .NET和C++都支持命名管道,套接字,內存映射文件,WM_COPYDATA。這樣做在過程中總是簡單得多。 – 2011-02-25 05:01:25