在我所有 StackOverFlow 兄弟的大力帮助下,我设法创建了一个 C++ DLL,它通过 COM 调用我的 C# 类并将数据来回传递给外部应用程序。该代码开始工作后,王国里举行了很多庆祝事件。
现在我有一个新问题。我正在扩展 DLL,以便它可以调用不同的类(都实现相同的接口(interface))。我需要根据加载时传递给 DLL 的字符数组来决定调用哪个类。无论我使用哪个类,我调用的方法都是完全一样的。调用 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 运行对我来说是一个重大挑战。
编辑:我确信有一些 super 优雅的方法可以实现这一点(反射(reflection)?)但请将您的建议限制在可以轻松实现的东西上......效率在这里并不重要,可维护性也不是真正的问题。
最佳答案
像这样做:
GUID classId = GUID_NULL;
if( strcmp( modelType, "Model1" ) == 0 ) {
classId = __uuidof( class1 );
} else if( strcmp( modelType, "Model2" ) == 0 ) {
classId = __uuidof( class2 );
} else if(... etc, continue for all possible model types
}
IUnitModelPtr unit;
unit.CreateInstance( classId );
// interface methods can be called here
关于c++ - 如何有条件地选择我在 C++ DLL 中通过 COM 调用的 C# 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626373/