PB调用C#编写的WINFORM,并且注册好的COM组件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PB调用C#编写的WINFORM,并且注册好的COM组件相关的知识,希望对你有一定的参考价值。
为什么PB调用C#注册好的COM组件,每回前两次都会返回-3.第三、四次时就会正常返回0,并正常调用COM组件的
在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") //AddCom为c#中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()) 参考技术A 多测试,问题很模糊
用c#开发可供PB调用的COM组件
1>生成密钥
sn -k F:\CharacterSetConvert\CharSetUtil\CharSetUtilAilic.snk
2>编译CharSet.cs生成dll库文件
csc /t:library /keyfile:Ailic.snk /out:CharSetUtil.dll CharSet.cs
3>进入framwork的当前目录,执行regasm命令,注册库文件。注意命令中给文件指定具体的处理路径
regasm c:\windows\system32\CharSetUtil.dll /tlb:c:\windows\system32\CharSetUtil.tlb /codebase
以上是关于PB调用C#编写的WINFORM,并且注册好的COM组件的主要内容,如果未能解决你的问题,请参考以下文章