すべての StackOverFlow 兄弟の助けを借りて、COM 経由で C# クラスを呼び出し、データを外部アプリケーションとやり取りする C++ DLL を作成することができました。そのコードが機能し始めた後、王国では多くのお祝いがありました。
今、私は新しい問題を抱えています。DLL を拡張して、さまざまなクラスを呼び出せるようにしています (すべて同じインターフェイスを実装しています)。ロード時に DLL に渡される char 配列に応じて、呼び出すクラスを決定する必要があります。呼び出すメソッドは、使用するクラスに関係なくまったく同じです。DLL を呼び出すときにクラスを切り替える最良の方法は何ですか?
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// I want to do something like this....but how?
if (strcmp(modelType, "Model1") == 0) {
IUnitModelPtr pIUnit(__uuidof(ClassOne));
}
if (strcmp(modelType, "Model2") == 0) {
IUnitModelPtr pIUnit(__uuidof(ClassTwo));
}
//call method 1
//call method 2
CoUninitialize();
//exit
これはおそらくかなり単純な質問ですが、私は C++ をまったく知りません。COM を動かすことだけが、私にとって大きな挑戦でした。
編集:これを達成するための非常にエレガントな方法がいくつかあると確信しています(反射?)が、提案を簡単に実装できるものに限定してください....ここでは効率は重要ではなく、保守性は実際には問題ではありません。