C ++ COM对象作为属性(C++ COM object as property)

2019-10-22 21:58发布

我需要我的库的对象,特别是作为一个属性,因为我需要它在我的方法。

它的工作原理,如果我把它声明为一个局部变量:

#import "...\library.tlb"

int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);

    RobstepRemoteLibraryCSharp::IRobstepPtr interf(__uuidof(RobstepRemoteLibraryCSharp::Robstep));

    std::wcout << interf->Test() << std::endl;

    interf->ConnectToPlattform("192.168.0.1");
}

这工作和正是它应该做的一样。 但是,如何让“INTERF”变量作为财产? 我尝试不同的东西为止。

file.h

#import "...\library.tlb"

class robstep
{
public:
    robstep(void);
    ~robstep(void);

private:
    CComPtr interf; //Version 1
    CComObject<RobstepRemoteLibraryCSharp::Robstep>* interf; //Version 2
}

file.cpp

#import "...\library.tlb"

robstep::robstep(void)
{
    CoInitialize(NULL);

    interf.CoCreateInstance(__uuidof(RobstepRemoteLibraryCSharp::Robstep)); //Version 1
    CComObject<RobstepRemoteLibraryCSharp::Robstep>::CreateInstance(&interf); //Version 2

}

我用这个环节 ,这一个

我一定要投它还是这样呢?

Answer 1:

您应该使用第一个选项CComPtr<Interface>

如果你虽然导入TLB,通过#import ,你应该对你产生的,你可以使用一些智能指针模板。

RobstepRemoteLibraryCSharp::IRobstepPtr interf;
interf.CreateInstance(__uuidof(Class));


Answer 2:

除了公认的答案,这里是这个问题的解决矿:

CComPtr<RobstepRemoteLibraryCSharp::IRobstep> interf;
interf.CoCreateInstance(__uuidof(RobstepRemoteLibraryCSharp::Robstep));


文章来源: C++ COM object as property
标签: c++ com