つまり、これが現在の状況です。同じソリューションでC#GUIプロジェクトとC#エンジンプロジェクトを組み合わせています。GUIを使用すると、ユーザーや一部の高レベルのものなどと対話できます。エンジンの機能は、別のサードパーティアプリケーションと通信することです。エンジンには、サードパーティアプリケーションに接続するソケットがあり、メッセージをオブジェクトに変換してサードパーティアプリケーションに送信し、サードパーティアプリケーションからの応答をリッスンしてそれに応じて反応するメソッドもあります。エンジンとサードパーティアプリケーション間で通信されるデータは、オブジェクトにパッケージ化されます。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#GUIに再インポートすることが不可能なC#コードはありますか?