接触COM组件不久,按照网上教程用ATL模板弄了个COM组件,创建了类,添加了方法并注册。然后用MFC写了可执行程序调用COM组件接口的方法(函数),跑通没问题。
项目的要求是我要做一个通用的检测软件,测试多个厂家的COM组件。这些COM组件都是按照行业某规范提供一组函数接口,函数名和参数都规定好的,各厂家一致,内部实现不同。
我希望用一个检测软件,运行时选择不同厂家的那个dll文件,就能调用到这厂家COM组件接口的函数。那么首先各厂家COM dll文件的文件名是不确定的,#import ****.dll no_namespace 这里是否有麻烦? 更重要的是,各厂家COM组件中的类的名字不确定,无法在编写测试软件时导入,网上搜到的调用方法有:
CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
CComPtr<IGetRes> pGetRes; //智能指针 实际情况IGetRes不确定
pGetRes.CoCreateInstance(clsid);
pGetRes->Hello();
ProgID 等信息也许还可以查,测试程序运行时传进去,但 IGetRes 这个类接口名测试程序编译时就定了,运行时改不了。
如果各厂家COM组件类接口名,文件名现在都未知,那这个办法还行得通吗?应该如何动态调用呢?