最近做一個信息化三維仿真項目,基於第三方提供的虛擬引擎通過VC++2008做二次開發,其中涉及到與C#客戶端的融合以及數據交互的問題,
主要是VC++需要調用C#客戶端提供的類庫內的接口獲取C#客戶端內的數據。
VC++內調用C#提供的動態庫函數的方法,首先在引用的源文件添加相關的文件引用以及命名空間:
#using "D:\winCe\Debug\TestInterface.dll" using namespace TestInterface; using namespace std; using namespace System; using namespace System::Runtime::InteropServices;
在具體的調用函數中,本文測試直接在控制台程序的主函數中進行調用:
int _tmain(int argc, _TCHAR* argv[]) { TestInterface::TestInterfaceClass ^ptr = gcnew TestInterface::TestInterfaceClass();//初始化接口類 ptr->Initialize();//因為是兩個進程直接所以涉及到一些基礎數據的初始化 string chars = std::string((char*)(int)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(ptr->GetTestInfo()));//調用接口獲取數據(json或xml) return 0; }
這樣就能實現在VC++中調用C#類庫函數達到相關交互工作,當然不同進程的交互還有其他很多方式如共享內存,socket通信。根據不同的項目需求
選擇不同解決方案。