高手们看过来,应用程序如何从COM组件中取得到数据?

feelyousky 2008-10-07 11:41:57
我写了一个DLL形式的COM组件,现在想从该组件中取出一些数据。
用了两种方法都有问题,麻烦大家帮忙看看!
1,在应用程序中申请了一个对象,这个对象是个链表(非模板类的,是自己实现的),将该对象传给了这个组件,但是在组件的处理函数中调用该对象的成员函数的时候,发生错误。
2,用回调函数,在应用程序中写了个函数传入,DLL中将数据的指针传给回调函数。但是实现的时候,回调函数在用NEW申请内存的时候,发生问题,改用GLOBALALLOC,申请的时候没有问题,但是MEMCPY的时候又发生问题。

不清楚确切什么问题,感觉是DLL中和主程序的指针范围有关系,但是对于进程内的组件,两者不是应当处于同一个进程空间吗?为什么会有问题?
请高手们帮帮忙!!!

...全文
132 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feelyousky 2008-10-14
  • 打赏
  • 举报
回复
是不是我说的不清楚,感觉大家没太明白我的意思。
我是要把链表指针传给组件使用,组件往表中加数据,同时主程序从链表中取数据使用。
feelyousky 2008-10-13
  • 打赏
  • 举报
回复
用回调函数的方法,我之前是因为其他地方有错误,改正后,发现这样是可以的。
但是第一种方法有什么问题?请高手们指出来。
wangweixing2000 2008-10-13
  • 打赏
  • 举报
回复
感觉COM中问到传参数的问题比较多,一个Safearray,一个BSTR,其他的按照c的标准类型来就是
tom_12_23_34 2008-10-13
  • 打赏
  • 举报
回复
我做过一些关于COM的开发.鬼子要求,字符串用BSTR传递.数组要用两个方法一个传出数组个数,然后通过Safearray传出.如果是链表是比较麻烦的,要在COM中做ENUM厂,先传出头指针.然后NEXT.
JJZHK 2008-10-13
  • 打赏
  • 举报
回复
用Safearray传递吧。
jameshooo 2008-10-13
  • 打赏
  • 举报
回复
就因为调用回调时的线程上下文跟原来的线程可能是不同的,容易出错。
yxz_lp 2008-10-10
  • 打赏
  • 举报
回复
CoTaskMemAlloc
CoTaskMemFree


UDX协议 2008-10-10
  • 打赏
  • 举报
回复
楼上两位大虾已经说的够多了。
最好按com规范吧,这样以后扩展方便 。
VsirSoft 2008-10-10
  • 打赏
  • 举报
回复
COM不熟 跟着学
Nosky100 2008-10-07
  • 打赏
  • 举报
回复
好多强人啊,跟着学习。
jameshooo 2008-10-07
  • 打赏
  • 举报
回复
坚持谁分配内存由谁释放,不要跨模块混合操作内存,或者使用独立的堆内存(比如COM堆),BSTR或者SAFEARRAY都是使用的COM堆,所以跨模块传递没有问题。
另一种方案是把需传递的结构体也封装成接口,通过接口方法来访问数据,在组件方法中传递接口指针。
oyljerry 2008-10-07
  • 打赏
  • 举报
回复
用SAFEARRAY来在COM组件之间传递数据

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧