所以这就是现在的情况:我有一个 C# GUI 项目和一个 C# 引擎项目在同一个解决方案中。GUI 允许与用户交互,一些高级别的东西等。引擎的功能是与另一个第三方应用程序通信。Engine 具有连接到第三方应用程序的套接字,也具有将消息转换为对象、将其发送到第三方应用程序、侦听第三方应用程序的响应并做出相应反应的方法。引擎和第三方应用程序之间要通信的数据被打包到对象中。C# 引擎的问题是它太慢了。所以这个想法是将引擎转换为非托管 C++ 以提高速度。这是我的攻击计划:
- 手动将整个 C# 引擎翻译成 C++(这已经相当令人生畏,因为 C# 引擎包含线程和哈希表)
使用以下内容替代 C++ 中的构造函数、访问器和修改器:
void* CreateInstance() { MyClass* p = new MyClass(); return p; } void ReleaseInstance(void* pInstance) { MyClass* p = (MyClass*)pInstance; delete p; } int GetData(void* pInstance) { MyClass* p = (MyClass*)pInstance; return p->GetData(); } void SetData(void* pInstance, value) { MyClass* p = (MyClass*)pInstance; p->SetData(value); }
(我不能在 C++ 中使用真正的类的原因是因为你不能在 C# 中实例化 C++ 对象)
然后构建一个 C++ 非托管 DLL,在 C# GUI 项目([DllImport 等])中使用 P/Invoke 来访问所有 C++ 方法,并使用它来替换 C# 引擎。对象将使用方法进行模拟,并在 C# GUI 和 C++ 引擎之间来回传递。
在我开始这项耗时的任务之前,是否有任何 C# 代码无法翻译成 C++,然后通过这种方法重新导入 C# GUI?