分享 N種方法使用C++調用C#.NET庫
加精
為了減少篇幅,此文不描述何種場景下需要使用C++調用C#/VB等托管代碼,而直接給出三種常規方法和一些變通方法以供參考。
常規方法1:COM
使用C#把托管類注冊成COM,用regasm.exe注冊output assembly,然后用C++像調用COM一樣調用assembly里面的type。
優點:編寫代碼簡單,調用方便
缺點:需要注冊output,發布不夠簡單
參考:http://www.codeproject.com/KB/cs/ManagedCOM.aspx
常規方法2:CLR
C#常規編寫類,生產assembly,C++使用CLR編譯既可直接引用托管類。
優點:編寫代碼簡單,調用方便
缺點:需要了解C++ CLR語法(既不像C++,又不像C#,總之很奇怪)
參考:http://www.codeproject.com/KB/mcpp/cppcliintro01.aspx ,http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx
常規方法3(推薦):API
C#常規編寫類,生產assembly,C++使用SDK提供的CLR非托管接口(CLRCreateInstance)進行調用。
優點:傳統C#編程,傳統C++編程
缺點:暫時還沒發現
參考:http://nport.codeplex.com/SourceControl/changeset/view/45681#903468 ,http://msdn.microsoft.com/en-us/library/dd537633.aspx
變通方法:
1. 使用C#/VB包裝現有托管類,注冊成Windows服務,暴露SOAP web service。VC2005可以使用非托管代碼添加引用Web service。
2. 使用C#/VB包裝現有托管類,注冊成Windows服務。C++利用Windows message和服務通訊。
3. 使用C#/VB包裝現有托管類,注冊成Windows服務。C++利用Windows共享內存和服務通訊。
其實利用雙進程通訊的方法,可以演變出各種各樣調用的思路。聰明的你可以充分發揮想象力,寫出自己獨有的調用模式。
常規方法1:COM
使用C#把托管類注冊成COM,用regasm.exe注冊output assembly,然后用C++像調用COM一樣調用assembly里面的type。
優點:編寫代碼簡單,調用方便
缺點:需要注冊output,發布不夠簡單
參考:http://www.codeproject.com/KB/cs/ManagedCOM.aspx
常規方法2:CLR
C#常規編寫類,生產assembly,C++使用CLR編譯既可直接引用托管類。
優點:編寫代碼簡單,調用方便
缺點:需要了解C++ CLR語法(既不像C++,又不像C#,總之很奇怪)
參考:http://www.codeproject.com/KB/mcpp/cppcliintro01.aspx ,http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx
常規方法3(推薦):API
C#常規編寫類,生產assembly,C++使用SDK提供的CLR非托管接口(CLRCreateInstance)進行調用。
優點:傳統C#編程,傳統C++編程
缺點:暫時還沒發現
參考:http://nport.codeplex.com/SourceControl/changeset/view/45681#903468 ,http://msdn.microsoft.com/en-us/library/dd537633.aspx
變通方法:
1. 使用C#/VB包裝現有托管類,注冊成Windows服務,暴露SOAP web service。VC2005可以使用非托管代碼添加引用Web service。
2. 使用C#/VB包裝現有托管類,注冊成Windows服務。C++利用Windows message和服務通訊。
3. 使用C#/VB包裝現有托管類,注冊成Windows服務。C++利用Windows共享內存和服務通訊。
其實利用雙進程通訊的方法,可以演變出各種各樣調用的思路。聰明的你可以充分發揮想象力,寫出自己獨有的調用模式。
