本节部分内容要求读者熟悉COM的消息调用原理,原理请参见杨老师的 专栏文章。
前文内容:
COM 服务器 --> COM 客户端
...
COM 服务器 --> .net客户端
1、P/Invoke
2、COM Interop(本节内容)
上回介绍了COM服务器端未知或没有接口时的调用方法P/Invoke,这回我们来探讨一下已知接口的情况,COM Interop 方式。
一、普通的接口函数调用
这部分的示例代码叫做ComP6srcDNet中的ComP5工程,呵呵,有点眼熟吧,其实我的目的只是想介绍.net部分,所以COM和MFC部分引自杨老师的“COM 组件设计与应用(七)——编译、注册、调用” ,只有Use_Net的代码是我写的,我在这里多谢杨老师啦,没有您前面栽的树,咱也没法乘凉哈^_^
虽然.net本身就是COM凤凰涅磐后的产物,从很多.net结构的工作原理中都能看到 COM 的影子,但是从.net的COM调用中可以很明显的看出,.net在淡化(隐藏)接口的作用,这一点从下面的代码中可以看到。
[文档属性]
VC原创文档[中文]
[文档作者] caeser2
[更新日期] 2006-4-2 22:07:00
[浏览次数] 5816
--------------------next---------------------
大学毕业前的最后一学期,在一家公司实习,当时的工作需要用到一些操作系统提供的组件。那时候只知道COM这个名词,并不知道到底是怎么回事,只知道上网到处找别人的源码解决自己的问题;那段日子到现在回忆起来都是灰色的,每天呆坐在电脑前,一个网站一个网站的查找自己需要的源码。但并不清楚自己到底在做什么;那时候对自己能不能成为一个程序员充满了怀疑。在实习结束返校的火车上,一夜间,我把一本《COM本质论》翻看了120多页。当我和当时的女友吹嘘自己一夜可以看100多页书的时候,她马上问我:看懂多少?当时我哑口无言。她忍受不了我那段日子的失落和抱怨,从那时候起,我们结束了那段简短的感情。到如今我还在一个人漂泊着,而上周她成为了别人的妻子。想不到用什么方式去纪念我迄今为止经历过的唯一一段感情,我和她的感情并不完全是因为COM结束的,但由于对COM的迷惑,使我走向了迷茫,失落;对自己失去了信心,在她面前变成了一个悲观失望的人。写这篇文章权当对这份感情的一份纪念吧。
[文档属性]
VC原创文档[中文]
[文档作者] junguo
[更新日期] 2006-1-11 10:15:00
[浏览次数] 21188
--------------------next---------------------
1、在 2005 年一月刊的 MSDN 杂志文章中,你有一个例子程序的代码是用混合模式编写的。有没有可能动态加载 .NET 类或 DLL 并调用那些函数呢?假设我有一个本机 C++ 应用程序,我想允许用户在 .NET 中为该 C++ 程序编写插件。就像在 .NET 中使用 LoadLibrary 加载 DLLs 一样。
Ravi Singh
2、我正在用 Visual C++ 6.0 编写一个插件应用,它是一个 DLL,输出和接收纯虚拟接口指针。加载 DLL 后,EXE 便调用 DLL 中输出的 C 函数,该函数返回一个纯虚拟接口指针。然后 EXE 调用该接口上的方法,有时会传回另一个接口指针给 DLL 处理。
目前有人要求必须用 C#,Visual Basic .NET 和其它语言编写插件。我没有什么基于 .NET 的编程经验,不懂托管和非托管代码之间的通讯问题,我找到许多有关这方面的信息,但是越看越糊涂。我如何才能让用户编写基于.NET 语言的插件?
[文档属性]
VC.NET个人专栏译文[中文]
[文档作者] Paul DiLascia
[更新日期] 2005-9-27 19:36:00
[浏览次数] 17249
--------------------next---------------------
上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。
着好复杂呀......呵呵,其实简单的紧:(注1)
1、一个 COM 组件,允许有多个连接点对象(IConnectionPoint)。
也就是说可以有多个发生“事件”的源头。上图就有3个连接点;
2、管理这些连接点的接口叫“连接点容器”(IConnectionPointContainer)。
连接点容器接口特别简单,因为只有2个函数,一个是 FindConnectionPoint(),表示查找你想要的连接点;另一个是 EnumConnectionPoints(),表示列出所有的连接点,然后你去选择使用哪个。在实际的应用中,查找法使用最多,占90%,而枚举法使用只占 10%,一般在支持第三方的插件(Plug in)时才使用。(你想写个 IE 的插件吗?我们后面就要讲到啦)
3、每一个连接点,可以被多个客户端的接收器(Sink)连接;
这个我们已经熟悉啦,还记得我们在上回书中为了管理多个回调接口,使用了 cookie 的方式进行区别吗?!
[文档属性]
VC.NET个人专栏原创文档[中文]
[文档作者] 杨老师
[更新日期] 2005-9-20 12:46:00
[浏览次数] 20575
--------------------next---------------------
阅读(214) | 评论(0) | 转发(0) |