Mar*_*ski 5 c++ com dll atl visual-c++
我正在写一个ATL项目,我想知道如何在这里创建类.现在我有一个由Add/Class/ATL Simple Object创建的类.我想把它分成更小的类,但这个类的方法应该使用CComPtr并CComPtr作为参数.我不能创建'简单'的c ++类,因为我没有CComPtr.
我应该通过ATL简单对象向导创建ATL类,然后使用此类的接口来调用方法.像这儿:
CComPtr<ITestAtlClass> tptr;
tptr.CoCreateInstance(CLSID_TestAtlClass);
tptr->test();
Run Code Online (Sandbox Code Playgroud)
我应该通过Class View/ITestAtlClass/Add/Add方法添加所有公共方法吗?那么施工人员呢?我是否必须仅通过属性初始化我的类(并通过Class View/ITestAtlClass/Add/Add Property添加它们)?并通过IUnknown接口传递每个com对象?
有人能告诉我在ATL项目中应该怎么做.我将在内部使用这个较小的类(没有人会在我的DLL之外创建这个类)只是为了让我的代码更具可读性.
我不明白你的评论,你不能CComPtr从一个简单的C++类使用.你能澄清一下吗?
我看到两个策略:
CComObject<>和派生来实例化和维护这些类,而不需要CoCreateInstance仅使用公共接口的开销和限制.第一个通常更好,但如果你正在构建一个数据量很大的对象模型,第二个可能是一个有用的技术.
如果你有一个ATL COM类CVehicle,它派生自CComObjectRootEx<>和朋友,你可以像这样实例化它;
CComObject<CVehicle>* vehicle = NULL;
CComObject<CVehicle>::CreateInstance(&vehicle);
vehicle->AddRef();
// To get at any of its interfaces, use:
CComPtr<ICar> car = 0;
vehicle->QueryInterface(&car);
// And to delete object, use:
vehicle->Release();
Run Code Online (Sandbox Code Playgroud)
还存在变化CComObject<>,例如CComObjectStack<>使用不同的分配和引用计数策略.
如你所见,这非常混乱.如果你能解释一下你的评论无法使用的意思CComPtr,也许我可以扩展一下.
| 归档时间: |
|
| 查看次数: |
5045 次 |
| 最近记录: |