C#创建COM供PB调用

    PB9(包括 PB9)以前的版本都不能访问VS.Net创建的基于Net FrameWork下的程序,除非将程序编译成COM,PB才能正常调用。
    以下是我总结出的C#将类库编译成COM所需要的步骤:
1.创建一个类库程序;
2.在程序里添加using System.Runtime.InteropServices;
3.创建一个公用的函数,以供PB调用;
4.启动命令窗口;
5.生成snk文件:
    sn -k test2.snk
6.将cs文件编译成dll文件:
    csc /t:library /keyfile:test2.snk /out:test2.dll test2.cs
如果在程序中添加的引用不属于System下的,例如:Microsoft.VisialBasic.dll,编译的语句改为:
    csc /t:library /keyfile:test2.snk /out:test2.dll /r:Microsoft.VisualBasic.dll test2.cs
7.注册COM:
    regasm test2.dll /tlb:test2.tlb /codebase

 

C#例子的全部代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Runtime.InteropServices;
  5. namespace test2
  6. {
  7.     public class test2
  8.     {
  9.         public int ShowMsg(out int a1,out string a2)
  10.         {
  11.             a1 = 200;
  12.             a2 = "message";
  13.             return 100;
  14.         }
  15.     }
  16. }

PB调用的方法如下:

OLEObject test2
long ll_status
integer li_return
long ll_a1
string ls_a2
//创建OLEObject对象
test2 = Create OLEObject
ll_status= test2.ConnectToNewObject("test2.test2")
if ll_status=0 then 
    //调用类内的公共函数
    li_return = test2.ShowMsg(ref ll_a1,ref ls_a2)
    messagebox(string(ll_a1)+" "+ls_a2,string(li_return))
end if
//释放资源
test2.DisConnectObject()

特别说明:
ll_status= test2.ConnectToNewObject("test2.test2")语句中的两个test2,前一个是C#的命名空间,后一个是类的名称。

 

转自:http://www.cnblogs.com/yuhx/archive/2007/06/18/787085.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c# 2005中编写com组件,PB11调用实例,研究了一下午,终于成功了,分享给大家 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#dll时要注意。 1、c#2005中新建项目,类型为类库,项目名为AddCom确定。   配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)” 2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用 3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,有很多呢。 4、c#中源代码如下,按如下方法编写代码后生成工程,/bin/release中得到AddCom.dll。 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace AddCom { [Guid("298D881C-E2A3-4638-B872-73EADE25511C")] public interface AddComInterface { [DispId(1)] int iadd(int a, int b); } [Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")] [ClassInterface(ClassInterfaceType.None)] public class AddComService : AddComInterface { public AddComService() { } public int iadd(int a, int b) { int c = 0; c = a + b; return c; } } } 5、dos下利用 e:\regasm AddCom.dll 命令注册com组件,可以理解为非.net平台下的regsvr32注册dll组件。提示注册成功即可。 6、pb11中利用ole调用调用com组件,注意,此com组件无法用create ole control的browse查看到,只能利用如下的方法直接动态调用。 integer li_a,li_b,li_total //----------注册c#生成的com组件------------ OleObject ole_AddCom ole_AddCom = Create OLEObject li_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddComc#中namespace,AddComService为c#中namespace中的class if li_rc <> 0 then MessageBox("ConnectToNewObject", string(li_rc) ) return end if //----------调用com组件中的函数-------------- li_total = ole_AddCom.iadd(li_a, li_b) //iadd为c#中namespace(AddCom为c)中class(AddComService为c)中的函数(iadd()) 完毕 *以上为个人经验,欢迎大家发邮件沟通。 email: kair-china@vip.sina.com qq: 55092518
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值