连接COM与.NET的桥梁(2)COM服务器的P/Invoke方式

一、COM 服务器 --> COM 客户端

这是传统的 COM 知识,如果对这部分内容不清楚,可以去看 杨老师 的个人专栏,那里有非常棒的教程,我就不在这里废话了^_^

我不细说可并不代表这部分不重要,恰恰相反,如果读者对这部分很熟悉,就会发现后面所有的内容在形式上几乎都是模仿传统的COM调用。

二、COM 服务器 --> .net 客户端

嗯,这才是重点。下图是这部分的原理。每个COM对象都会有且只有一个运行库可调用包装(RCW)代理,而不管它有多少个引用。


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


这种情况用到的操作就是P/Invoke。我们至少要知道如下二个内容:

DLL文件的名称

将要调用的函数的名称或者序号;

然后需要做如下二个步骤:

在.net程序中标识它,必须是静态的、外部的

C++得这样:extern "C";像调用普通函数那样调用它;对于参数要注意:

如果是结构或类,注意内部成员必须定义为public,才能公开

可以应用一些属性来实现“个性化”,详见下面的“个性化”属性代码;如果要调用的函数有很多,或者想将这个函数成为托管类的成员,可以使用包装类:

直接在现有类内声明 DLL 函数;

使函数相互隔离,易于查找,可以分别为每个 DLL 函数创建一个类;

时间: 2024-08-22 12:05:54

连接COM与.NET的桥梁(2)COM服务器的P/Invoke方式的相关文章

连接COM与.NET的桥梁(3)COM服务器的COM Interop方式

本节部分内容要求读者熟悉COM的消息调用原理,原理请参见杨老师的专栏文章. 前文内容: COM 服务器 --> COM 客户端 ... COM 服务器 --> .net客户端 1.P/Invoke 2.COM Interop(本节内容) 上回介绍了COM服务器端未知或没有接口时的调用方法P/Invoke,这回我们来探讨一下已知接口的情况,COM Interop 方式. 一.普通的接口函数调用 这部分的示例代码叫做ComP6srcDNet中的ComP5工程,呵呵,有点眼熟吧,其实我的目的只是想介

vpn 单向ping通-vpn连接好后,客户端可以ping通服务器,服务器无法ping通客户端。

问题描述 vpn连接好后,客户端可以ping通服务器,服务器无法ping通客户端. 下载的openvpn软件,连接校内机房局域网内的两台机器,vpn显示连接成功,可是客户端可以ping通服务器,服务器无法ping通客户端. 但是用机房自带的局域网172.29.137.*可以互相ping通,用vpn分配的ip无法互相ping通,服务器的ip是10.0.0.1,客户端的是10.0.0.10. 另一个问题是,客户端的ip好像是服务器随机分配的,我是申请了2个客户端,但是我试过几次,除了第一次外,服务器

我做了一个消息推送系统,客户端与服务器建立长连接,但是由于客户端越来越多,服务器怎样做集群呢

问题描述 我做了一个消息推送系统,客户端与服务器建立长连接,但是由于客户端越来越多,服务器怎样做集群呢 我做了一个消息推送系统,客户端与服务器建立长连接,但是由于客户端越来越多,服务器怎样做集群呢 解决方案 这个有很多方案.首先你要说你用的是什么语言做的消息推送系统. 例如Java,还是C++,还是其他的. 另外 把连接接入与业务处理分开,那么做分布式自然很简单.内部可以使用 RPC进行通信.等级每个用户的实时地址. 解决方案二: 用java语言做的,使用的androidpn

NAS网关连接NAS与SAN的桥梁

  由于费用低廉以及部署便捷等好处,NAS设备受到IT经理的青睐,迅速在企业中得到广泛的应用.但是这种灵活性是要付出代价的:出现的存储孤岛越多,存储管理任务就变得越复杂.因此,许多公司部署了存储区域网来整合存储环境. NAS网关通过将IP网络连接到基于光纤通道的存储上,架起一座连接NAS与SAN世界的桥梁.这种高度优化的文件服务器帮助企业更好地保护了存储投资. NAS网关不仅提供了一种高性价比的整合方法,而且降低了向SAN基础设施添加新NAS应用的费用. 部署连接SAN存储的NAS网关使管理人员

关键字是连接网站—搜索引擎—用户的桥梁

大家好!我们又见面了,波小斯在上一篇<如何提高网站搜索引擎排名秘笈之内功心法第一篇--网站的内涵>中和大家分享了如何从1)站内内容质量.2)网站访问速度.3)网站深度.4)网站分类组织结构.5)网站辅助阅读系统.6)网站合理布局及细节把握.7)广告干扰程度,七大方面来建设对用户更加友好.更加利于搜索引擎收录的好网站.这是我们需要在内部建设方面做得第一件大事,下一步我们应该考虑如何让更多需要我们网站服务或者产品的用户发现我们.毋庸置疑,关键字是我们开启"通过搜索引擎桥链用户"

连接COM与.NET的桥梁(1)预备知识

本文代码使用ISO C++和.net v1.1框架(VS 2003)编写,但其原理适合所有支持.net框架的语言 一.前言 由于传统的COM技术使用静态的非托管编程,而.net使用动态的托管编程,所以这个题目本质上讨论的是托管与非托管代码之间的互操作中的一个特例.目前的 .net v2.0 提供以下 三种互操作: 模块级别的P/Invoke方法 这种操作方法适合调用在动态链接库 (DLL)(如 Win32 API 中的 DLL)中实现的非托管函数.将在下一节讨论: 组件级别的COM Intero

云通信—连接产品与用户的桥梁

本文整理自2017云栖大会-成都峰会上云通信产品专家断木的分享讲义.讲义主要分享了用户运营对产品的重要性,运营过程中可能遇到的问题,以及云通信对这些问题的解决方法.

使用 Java 连接处于proxy(or 防火墙)之外的HTTP服务器

防火墙|服务器 我到sun站点上,发现他们的java Applet聊天室能够突破proxy,我在公司的局域网可以使用的,而一般的java程序是不能够的.大家可以去分析一下他们的程序 本技巧将向您讲述如何编写可通过代理访问因特网上的 Web 服务器的 Java 应用程序.在 Java 应用程序中加入代理支持只需额外编写几行代码,且不依赖任何安全性"漏洞". 几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者.一种常见的安全措施是完全断开与因特网的连接.如果黑客们不能连接到您的任

vb6.0与sae服务器连接-VB6.0与新浪云sae服务器连接

问题描述 VB6.0与新浪云sae服务器连接 我们在新浪云sae上面建立了数据库.我想本地用vb6.0读取数据库上面的文本文件,然后本地计算,计算完毕后将结果上传到新浪云sae服务器上. 解决方案 就是调用API就行,socket或者wininet