• C#开发COM组件供其他开发环境或工具调用介绍(转)


    由于工作原因涉及到这一块的开发,由于之前并未接触过,所以本篇文章也是在参考了各种资料后,自己实现并通过通过测试之后所整理的备忘录以及一些个人观点。

    希望对刚接触这类型开发的朋友有所帮助,若有不足之处还望不吝赐教。

    废话不多说,下面就是教学式内容了,第一次写,没有文采勿见怪。

    开发环境: .Net Framework 4.0

    开发工具: Microsoft Visual Studio 2010

    测试环境: Windows XP、.Net Framework 4.0

    测试工具: Delphi7、PowerBuilder8.0

    注意:

    1、每个COM组件所有对外公布的方法都必须通过接口形式实现;

    2、由于.Net下编译的COM组件并等同于C编译的COM组件,所以存在必须在运行目标机器注册的情况,对此.Net下编译的COM组件必须为程序进行签名,即强命名密钥;

    步骤:

    1、 新建一个类库项目(文件—新建—项目—类库【命名:HK.NetPBDemo】)

    2、 针对“注意第一点要求”,新建一个接口文件(项目右键—添加—新建项—接口【命名:IHK.cs】)

    3、 IHK.cs接口文件编码:

    int TestFunction(int num, string str1, string str2, double db);

    4、 将Class1.cs 改名为:HKTest.cs (这步其实很啰嗦,不过文档都整理了,就这样写吧)

    提示框点击“是”,如下图

    5、 HKTest.cs 类文件编码:

    添加名称空间:using System.Runtime.InteropServices;

    实现接口、并在类头添加属性:[ClassInterface(ClassInterfaceType.None)]。如下图

    6、 在“解决方案资源管理器”中找到节点“Properties”打开AssemblyInfo.cs文件

    如下图

    7、 将[assembly: ComVisible(false)]属性改成[assembly: ComVisible(true)]

    如下图

    8、 项目右键—属性、或者双击“Properties”节点,进入到项目属性设置界面

      8.1、选择“应用程序”选项卡,点击“程序集信息”按钮,如下图

        

      8.2、勾选“使程序集COM可见”,确定。如下图

      

      8.3、选择“生成”选项卡,在底部“输出”栏目下,勾选“为COM互操作注册”。如下图

      

      8.4、选择“签名”选项卡。

      8.4.1、勾选“为程序集签名”;

      8.4.2、在“选择强名称密钥文件”的下拉框选择“<新建…>”

      8.4.3、在“密钥文件名称”输入:HK.NetPBDemo.snk(任意命名,snk后缀即可)

      8.4.4、去掉“使用密码保护密钥文件”,确定。

      【8.4.3、8.4.4】如下图

      

    9、 编译项目。

    10、 打开vs指令窗,如下图

    11、 运行指令:

    gacutil /i DLL路径HK.NetPBDemo.dll 将这个DLL加入的全局缓存里

    regasm DLL路径HK.NetPBDemo.dll 注册这个dll

    如下图

    附:以上11个步骤即可完成COM组件在本机的环境下注册并提供调用。

    1、 若要在其他机器使用必须把编译的“DLL”、“TLB”文件一并复制在目标机器(已安装.Net Framework环境)并放在需调用的程序根目录;

    2、 在目标机器“c:WINDOWSMicrosoft.NetFrameworkv4.0.3.319”下找到“RegAsm.exe”,该路径是我的安装路径,如果没有就搜索下“RegAsm.exe”这个东东吧。【我的环境:虚拟机、系统WindowsXP、.Net Framework 4.0】

    3、 运行CMD打开指令窗,讲路径定位到“c:WINDOWSMicrosoft.NetFrameworkv4.0.3.319”,

    运行指令:regasm.exe DLL路径 HK.NetPBDemo.dll。 如下图【注册成功】

     

     

     

     

    二、DELPHI调用

    1、 打开Delphi7,File—Close All

    2、 Project—Import Type Library,点击“Add”按钮选中刚才编译后的“tlb”COM文件【HK.NetPBDemo.tlb】点击“Create Unit”如下图

    3、 Project—Import Type Library,在列表中选中刚才添加的组件,点击“Install..”按钮。

    如下图

    4、 File—New—Application,添加一个button按钮,然后在“ActiveX”选项卡选择刚才添加的组件,添加至项目。如下图

    5、 Delphi 关键代码

    Button1、HKTest1 均为自动生成对象,只要在Button的OnClick事件即可实现COM方法

    procedure TForm1.Button1Click(Sender: TObject);
    var
    rst:Integer;
    int:Integer;
    str1:string;
    str2:string;
    db:Double;
    begin
    int:=8;
    str1:='这是恒康提供COM组件调用例子';
    str2:='该例子用的是Delphi调用';
    db:=2.8;
    rst:=HKTest1.TestFunction(int,str1,str2,db);
    showmessage(inttostr(rst));
    end;

     引用别人的例子:Demo下载

  • 相关阅读:
    福大软工 · BETA 版冲刺前准备(团队)
    Alpha 事后诸葛亮(团队)
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    福大软工1816 · 团队现场编程实战(抽奖系统)
  • 原文地址:https://www.cnblogs.com/shenyixin/p/4729735.html
Copyright © 2020-2023  润新知