如何用纯C++写一个进程外的COM?搞不定了!! 本帖最后由 dawei_sun 于 2010-12-25 15:42:53 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以把代码发过来给我,我看看为什么不行,帮你补一下[email protected] 进程外的组件如果是使用纯粹的C++编写的话,和进程内的很多特性不一样的。因为不同进程是不能共享地址的,所以必须委托操作系统来进行它们之间的互动,这个互动就需要使用到代理和存根dll,COM里面还有个套间的概念,不同套间的接口使用需要封送操作的。 使用纯粹C++编写进程外的COM组件需要编写很多代码的。建议不要怎么做了,不过有个方法可以减少你的麻烦,可以使用idl编写脚本,然后使用idl的编译器,会自动编译出代理和存根的代码。包括接口声明代码。不过编译出来的代码可读性很差。 如果我没有写存根和代理什么的?那COM库不会使用默认的吗?我看ATL生成的进程外COM,它也没有相应的存根和代码DLL呀,那它就是可以正常。不过我通过QueryInterface发现,它的接口实现了IMarshal接口,按照书上说,这个接口如果不实现,COM库也会有默认的实现呀我实在是搞不明白了 如果用户量很大,进程外com尽量避免使用,创建进程的时候,容易被杀毒软件拦截,可能会起不来(类似360等弱智的安全软件,真的是不分青红皂白就拦截了,他不知道是不是病毒,就让用户选择,用户更不知道啊,知道的用360吗!)。 谢谢,但是我现在就想知道如何用纯C++写一个进程外的COM。 谢谢,但是我现在就想知道如何用纯C++写一个进程外的COM。 跨进程处理参数是需要代理的,没有代理是没有办法实现的。简单的产生代理的代码可以通过使用IDL编写接口然后IDL编译机器编译自动生成代理代码。 我也在学COM。楼主看我最近的几个帖子。进程外组件需要注册 proxy/stub dll的,楼主是不是没注册这步。返回的E_NOINTERFACE其实不是你定义的Interface, 可能是跨进程通信时的IMarshal什么的的。 两机通讯 TREE界面刷新 bitblt 中的源设备环境的句柄如何取得? 单文档分割窗口 代码中含有中文注释,调试时单步运行混乱 USER thread 如何获得HWND m_hWnd 多线程/SOCKET 请帮忙初学网络... 急 如何去除ListCtrl中的选择标记 对CComboBox窗口使用MoveWindow后,为什么不能正常显示下拉列表框 请帮忙解决一个CListCtrl的问题。谢谢~~~ 关于activeX的开布,这个activeX调用了N个dll,这些DLL又分调用了很多资源 exe程序中如何导出COM函数接口供别的程序调用?
[email protected]
因为不同进程是不能共享地址的,所以必须委托操作系统来进行它们之间的互动,
这个互动就需要使用到代理和存根dll,COM里面还有个套间的概念,不同套间的
接口使用需要封送操作的。
不过有个方法可以减少你的麻烦,可以使用idl编写脚本,然后使用idl的编译
器,会自动编译出代理和存根的代码。包括接口声明代码。不过编译出来的代码
可读性很差。
我看ATL生成的进程外COM,它也没有相应的存根和代码DLL呀,那它就是可以正常。
不过我通过QueryInterface发现,它的接口实现了IMarshal接口,按照书上说,这个接口如果不实现,COM库也会有默认的实现呀我实在是搞不明白了
简单的产生代理的代码可以通过使用IDL编写接口然后IDL
编译机器编译自动生成代理代码。
楼主看我最近的几个帖子。进程外组件需要注册 proxy/stub dll的,楼主是不是没注册这步。
返回的E_NOINTERFACE其实不是你定义的Interface, 可能是跨进程通信时的IMarshal什么的的。