连接COM与.NET的桥梁(2)COM服务器的P/Invoke方式2009-12-28caeser2一、COM 服务器 --> COM 客户端这是传统的 COM 知识,如果对这部分内容不清楚,可以去看 杨老师 的个人专栏,那里有非常棒的教程,我就不在这里废话了^_^我不细说可并不代表这部分不重要,恰恰相反,如果读者对这部分很熟悉,就会发现后面所有的内容在形式上几乎都是模仿传统的COM调用。二、COM 服务器 --> .net 客户端嗯,这才是重点。下图是这部分的原理。每个COM对象都会有且只有一个运行库可调用包装(RCW)代理,而不管它有多少个引用。

在没有公开接口(或者根本就没有)的情况下

这种情况用到的操作就是P/Invoke。我们至少要知道如下二个内容:DLL文件的名称将要调用的函数的名称或者序号;然后需要做如下二个步骤:在.net程序中标识它,必须是静态的、外部的C++得这样:extern "C";像调用普通函数那样调用它;对于参数要注意:如果是结构或类,注意内部成员必须定义为public,才能公开可以应用一些属性来实现“个性化”,详见下面的“个性化”属性代码;如果要调用的函数有很多,或者想将这个函数成为托管类的成员,可以使用包装类:直接在现有类内声明 DLL 函数;使函数相互隔离,易于查找,可以分别为每个 DLL 函数创建一个类;