Regasm 注册C# com 组件



    工作原因,需要把现成的C#编写的dll转变成可以供其他语言调用的组件接口。这过程中经历了点曲折,现在记录下来。

    先从C# 创建COM组件开始使用。第一步先建立C#类库,并且在类库AssemblyInfo.cs文件中修改ComVisible为true
第二步,编写接口类,并且在接口上贴上Guid特性标签,guid在工具里生成即可。例:
[Guid("D8481662-84F9-49F3-BE64-40B419C981A9")]
[ComVisible(true)]
public interface IMyCom
{
int Test();
}

第三步,实现接口并在实现类上编写ClassInterface,Guid特性。一般ClassInterface都为none
例如:
[ComVisible(true),ClassInterface(ClassInterfaceType.None),Guid("6F7D3E38-613D-4503-A578-98378FE954FE")]
[ProgId("COMTest.MyClass")]
public class MyCom:IMyCom
{
public int Test()
{
return 2;
}
}

最基本的com组件以及完成。这仅仅是测试dll,在正式开发的时候必须注意数据类型的问题,都要使用通用的数据类型。在需要注册。如果仅仅是在本机上使用即可通过vs项目属性配置完成注册功能,因为这个最方便。点击项目属性并且在生成选项里选择【为COM互操作注册】选择这个之后,那么每次编译都是一次注册咯。

当然,大部分还是
需要在其他机器上使用的,这个时候需要dos命令咯。凡是可以运行C#的地方必须有framwork,一般2.0最普遍。因为只有framwork的地方才可以注册C# com
除了上述的通过vs项目属性配置之外,还有另外两个方法。1.通过vs tools 的命令提示可以实现。2.通过cmd实现。不管哪种,输入的命令都是差不多。下面是一第二种
方式演示(该方法使用情况比较频繁)。
打开cmd命令框。
首先将需要注册的dll copy到system32下 copy [源目录] [%windir%\System32(当前系统是32位)] 注:如果目录名称过程使用双引号。这个操作并不是必须的,只是便于管理组件,并且也方便后面注册不需要加上很长的地址路径。
设置命令目录 cd %windir%\Microsoft.Net\Framework\v2.0.50727(.net framworkwork 2.0,如果其他版本请修改最后文件版本)。这个是将命令的目录设置子有regasm.exe程序的目录下的。通过vs工具命令注册也是依靠regasm.exe完成的。因为fw 2.0 几乎所有的xp系统都自带咯,win7以上更不用说。
CICS_Invoice.tlb /codebase
之前注册时我一直没有添加"/codebase",每次自己机器上使用很顺利,但是放在其他电脑上就出现“没有注册类别”的错误。codebase 必须强命名!强命名有两种方式添加,第一种就是使用sn -k  命令添加强命名,第二种还是通过vs界面操作来完成。咋项目属性的签名中通过界面操作完成强命名添加这个codebase可能做了类似全局缓存的作用。因为msdn上如果要将该com组件添加到全局缓存中则不需要该命令。但是没有vs工具上的机器是没有添加全局缓存的功能的。如果不添加codebase命令,在本机可以调用成功,但是一旦在别的没有开发环境的机器上注册之后就不能正常运行。之前网上也有人说直接/reg导出注册表,然后在别的主机上导入注册表。由于时间关键,这个方法没有尝试过,后面有机会会测试下是否可行。

是各个语言调用,这里使用Delphi调用测试。直接在项目选项中添加import type libray 然后选择所在的tlb,创建即可。使用方法和C#调用差别不大。
var
invoice:TCICSInvoice//(com组件类);
resultArray:WideString;
cc:TClassCICS;
begin
invoice:=TCICSInvoice.Create(nil);
resultArray:=invoice.RegUAMS(edt1.Text,edt2.Text,edt3.Text,edt4.Text);
这里我仅仅是测试使用的,并没有深入了解delphi调用组件这块。

最后附上msdn对regasm各个命令的解释:http://msdn.microsoft.com/zh-cn/library/tzat5yw6(v=vs.110).aspx


  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值