用atl写com组件,问题不怎么好说,具体见下,我在CGoLayers类中增加了一个接口方法如下:
STDMETHODIMP CGoLayers::Add(IGoLayer*layer, VARIANT_BOOL *pVal)
其中IGoLayer是我同一个dll中的另一个com类CGoLayer的接口。
现在我想在该Add方法中通过layer接口指针得到指向CGoLayer对象的指针,能不能得到?如何得到?
STDMETHODIMP CGoLayers::Add(IGoLayer*layer, VARIANT_BOOL *pVal)
其中IGoLayer是我同一个dll中的另一个com类CGoLayer的接口。
现在我想在该Add方法中通过layer接口指针得到指向CGoLayer对象的指针,能不能得到?如何得到?
解决方案 »
- Vc++中定时器settimer()有谁用过呢
- 如何使得对话框程序中控件随这窗口的大小自动变化
- 谁能帮我看看这段代码,作者这么写有什么特殊的含义么?
- 能不能只改变程序中的窗口标题栏的高度而不影响系统(即其它程序窗口的标题栏高度不受影响)?(很急!)
- 窗体创建的问题。
- 请在那位大侠:在VC代码为怎么去掉->符号?
- 100分求资料!!!!! 谁知道那可下载odbc api的资料?
- INSIDE COM 73 页的一个问题: 如何制作MAKEFILE文件阿??
- 字幕 的序列号标志如何读取比较好
- 关于DLL中的函数调用
- 重分,资源泄露怎么检查和定位?
- 新建一个单文档程序,关闭的时候不想让系统提示是否保存,想直接关闭,咋办?
inline HRESULT WINAPI _This(void* pv, REFIID id, void** ppObj, DWORD)
{
*ppObj = pv;
return S_OK;
};在CGoLayers类的接口映射表中添加一项:
COM_INTERFACE_ENTRY_FUNC(IID_NULL, 0, _This)然后在Add函数中就可以这样取得this指针了:
CGoLayers* pGoLayers = NULL;
HRESULT hr = layer->QueryInterface(IID_NULL, (void**)&pGoLayers);
if(SUCCEEDED(hr))
{
.......
}
因为IGoLayer接口是从IDispatch派生的,也就是IGoLayer是自动化的数据类型,
这样做是因为做出来的组件能被vb,dephi,等其他面向对象语言和脚本语言调用的
如果用CComObject<CGoLayer> *pGoLayer类型,除了vc之外,其他语言无法使用,做出
来的控件也无法在脚本中使用,
to LeeZi(临渊羡鱼,不如退而结网):
我写的这些接口也不是随便写的都是参考了arcInfo mo和mapInfo的MapX控件才写的,
因此该接口方法是合理的,没有什么问题。
谢谢你的回答!
有点新意,我再想想,
有谁做过比较大的地图控件(GIS),能暴露出对象层次模型给用户方便的进行二
次开发,希望和你交朋友,聊天,谢谢,qq:65469645
要想作对象层次, 你需要作大量工作, 请看MSDN"ATL Collections and Enumerators", 比较复杂.