我正在使用作为组件对象模型(COM)客户端的C ++命令行应用程序。有两种COM服务器实现,我想在我的程序中同时支持这两种实现(可通过应用程序参数选择)。
两台服务器都使用相同的命名空间OmniRig,因此一切冲突。我试图将它们分成单独的类以避免冲突,但这没有用。是否可以同时支持两个COM服务器,我将如何做呢?
OmniRigV1.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe"
using namespace OmniRig;
class OmniRigV1 : public OmniRigBase {...}
OmniRigV2.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe"
using namespace OmniRig;
class OmniRigV2 : public OmniRigBase {...}
main.cpp:
int main(int argc, char* argv[])
{
ProgramOptions options(argc, argv);
OmniRigBase* omnirig;
switch (options.getOmnirigVersion()) {
case OmniRigVersion::OmniRigVersion1:
omnirig = new OmniRigV1(options);
break;
case OmniRigVersion::OmniRigVersion2:
omnirig = new OmniRigV2(options);
break;
default:
exit(E_OPTION_OMNIRIG_VERSION);
}
...
完整代码位于:https : //github.com/cniesen/IcomClockOmniRig/tree/adf7ce1b0ef716ec2f72d50bffbada4e811a52cf/src
正如Ingor在评论中提到的那样,我需要rename_namespace
在#import
指令中使用该选项:
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe" rename_namespace("OmniRig1")
和
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe" rename_namespace("OmniRig2")
现在,可以使用适当的名称(例如OmniRig1::OmniRigX
和OmniRig2::OmniRigX
归功于Ingor。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句