要实现的功能是调用Arcgis 控件的接口函数。 |
|
40分 |
第一种方法 mySetData 没有初始化当然报错。(IPropertySet *mySetData= NULL;)
第二种方法,你要判断一下各各函数的返回值,不能直接调用,这样不能定位问题 至于调用方式,第二种是正确的,相关问题你可以看一下一本书 |
未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
你用NULL指针调用成员函数。根据C++标准,调用成员函数须解引用指针,而解引用NULL指针,属未定义行为 在Windows上,表现为访问违规,异常编号:0xC0000005 并给出提示:读取位置 0x00000000 时发生访问冲突 这里的0x00000000就是你的NULL,第一个是因为你初始化为NULL后就没变过,第二个是你的CoCreateInstance没有成功 |
|
CoCreateInstance 函数的返回值 REGDB_E_CLASSNOTREG,没有注册,手动注册后还是一样,分析中
|
|
10分 |
手动注册后,在注册表里找到了吗?
|
HKEY_CLASSES_ROOT 里可以找到的,
难道是注册表中的服务器类型损坏? 这个怎么判断和解决? |
|
CoCreateInstance(CLSID_PropertySet,(LPUNKNOWN)CLSCTX_INPROC_SERVER,NULL,IID_IUnknown,(void **)&pUnk);
这个函数第一个参数应该传入的是 组件的 GUID 吧, 你这里传入的是接口的GUID |
|
CoCreateInstance 的声明
HRESULT _stdcall CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID * ppv);
第一个参数:待创建组件的CLSID。 第二个参数:用于聚合组件。 第三个参数:dwClsContext的作用是限定所创建的组件的执行上下文。 第四个参数:iid为组件上待使用的接口的iid。 |
|
50分 |
你这么一提醒才发现楼主参数错了,但不是第一个,而是第二个和第三个颠倒了 CoCreateInstance(CLSID_PropertySet,(LPUNKNOWN)CLSCTX_INPROC_SERVER,NULL,IID_IUnknown,(void **)&pUnk); |
谢谢各位了,网上找的例子就直接照搬了,看来要先搞明白了在用,还需努力学习
|
|
学习了,正在研究COM方法。
|