c++ - 如何有条件地选择我在 C++ DLL 中通过 COM 调用的 C# 类?

标签 c++ com interface createinstance

在我所有 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/

相关文章:

java - 泛型与接口(interface)

c# - 如何在 C# 中为 COM STA 线程发送消息?

java - 如何使用接口(interface)引用保护匿名类的创建

c++ - 找出最大、最小、正数和负数

c++ - MPI_REDUCE 一个动态计算的数组

c++ - 通过计算步数计算算法复杂度

C++ - 通过添加合法/推荐的整数字节来向前移动 char 指针吗?

c++ - GCC 问题 - 从 'void (*)(MyObject*, bool)' 到 'const void*' 的无效转换

c++ - 我应该如何在 ATL 项目中创建类?

java - 将主体写入接口(interface)方法时如何避免重复代码?