PB调用C#编写的Dll类库

PB调⽤C#编写的Dll类库
在c# 中编写com组件,供PB调⽤实例
前⾔:c#中写的dll直接是不能被pb调⽤的,只有写成com组件才可以调⽤,所以⽤c#写dll时要注意。
c#中新建类库
  类库类型为通⽤类库,项⽬名为AddCom
1、配置:右键点击解决⽅案资源管理器中的AddCom,选择“属性”,选择“应⽤程序”->“程序集信息”,勾选“使程序集COM可见”,然后点
击“⽣成”,选择“为COM互操作注册
2、打开AssemblyInfo.cs⽂件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调⽤情报分析
3、编写com组件会⽤到guid(全球唯⼀ID),编写com组件必须要⽤到。c#会默认⽣成⼀个放在AssemblyInfo.cs,如没有⽣成,可以⽤GUID ⽣成器⽣成,也可以⽹上下⼀个⽣成guid的软件
4、c#中源代码如下
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;
}
}
}
⾄此,关于C#的Dll已经操作完成,下⾯开始注册
注册DLL
注册有两种⽅法
1、C:\WINDOWS\Microsoft.NET\Framework\v2.0. E:\Test\MyLib.dll /tlb: E:\Test\MyLib.tlb分数布朗运动
反注册:C:\WINDOWS\Microsoft.NET\Framework\v2.0. /u E:\Test\MyLib.dll /tlb: E:\Test\MyLib.tlb
(这个地址是安装Framework的物理地址,根据⾃⼰电脑不同进⾏修改)得到下⾯图所⽰即成功注册
2、run("regasm MyLib.dll /tlb: MyLib.tlb",minimized!)
前提是把⽂件复制到当前项⽬中
PB调⽤DLL
pb中利⽤ole调⽤来调⽤com组件
OLEObject OLEObject
long li_status
int li_reg
int li_cel
string a = "aa"
string b = "bb"
/
/创建OLEObject对象
OLEObject = Create OLEObject
//创建连接
li_status= OLEObject.ConnectToNewObject("RakbLibrary.Class1")
if li_status<>0 then
//连接不成功,先反注册组件,再重新注册组件
li_cel = run("regasm /u RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)
if li_cel <> 1 then
messagebox('提⽰','反注册失败!')
return
else
messagebox('提⽰','反注册成功!')
li_reg = run("regasm RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)
if li_reg<>1 then
messagebox('提⽰','组件注册失败!')
return
else
messagebox('提⽰','组件注册成功!')
end if
end if
else
//调⽤类内的公共函数
li_res = Form(a,b)
end if
//释放资源
OLEObject.DisConnectObject()
如果返回值是-3 ,Object could not be created  ⽣成exe执⾏⽂件就好了
注意:li_status 连接状态是0则说明连接DLL成功,否则可能就是DLL没有注册成功,需要重新注册⼀下(注册是时候最好先反注册⼀下)   li_cel 注册状态为1则说明注册成功 
OLEObject.DisConnectObject()释放资源要放在调⽤DLL类库的函数之后,否则会接收不到该函数的返回值
 所有需要的⽂件(C#的dll⽂件和tlb⽂件,)要放在⼯程的根⽬录下,且这⼏个⽂件要放在同⼀⽬录下

本文发布于:2024-09-22 05:25:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/231368.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:arcgis中vb用法
标签:注册   组件   类库   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议