今天需要作一下pb引用.net的外接程序类。反复测试都没有成功。看到这篇文章解决了我的问题。在此感谢。综合我的碰壁经验。需要注意以下两点。
1..net项目需要勾选生成 com组件。
2.在类名前加上标识。
以下是对原文章的转载:
http://blog.sina.com.cn/s/blog_53d716150100kp2k.html
****************************************************************
对于现在使用PB和.NET同时开发的项目,现在.NET已经有的功能,想在PB下调用,只能把.NET做成COM组件,再在PB中调用。
方法如下:
一.在.NET中新建类库
二.注册类库
三.在PB中调用
下面详细介绍一下:以.NET2005和PB11.5为例
一、在.NET中新建类库
1.打开Microsoft Visual Studio 2005
2.新建类库项目:点文件-->新建-->项目,在打开窗口选择类库
3.添加代码:
新建后出现一个Class1.cs的类库文件,打开,修改成代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace demo
{
public class Class1
{
public int AddTenToParameter(int param1)
{
return param1 + 10;
}
public void SayHi()
{
System.Windows.Forms.MessageBox.Show("Hello World!");
}
public String GiveMeDate()
{
return DateTime.Now.ToLongDateString();
}
}
}
4.添加引入,因为MessageBox需要Form组件。
5.修改项目属性,点项目,右键,选属性。
在“生成”TAB属性页中选中“为COM Iterop注册”
using System.Runtime.InteropServices;
7.增加下面属性到类【注意 regasm 要加上参数/codebase,否则导致客户机不能正确调用到dll
】
[ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] [ProgId("demo.Class1")]
现在类库就完成了,可以编译使用了。如要修改ProgId可以在AssemblyInfo.cs 进行修改。
二.注册类库
使用regasm进行注册
命令如下:regasm /codebase demo.dll /tlb:demo.tlb
三.在PB中调用
在程序中用以下代码
int return_code
return_code = example.ConnectToNewObject("demo.Class1")
if return_code <> 0 then
destroy example
messagebox('错误','打开OLE出错!')
return
else
example.sayhi()
int v = 20
messagebox('result',v)
string s
s = example.givemedate()
messagebox('result',s)
end if
现在就完成了在PB中调用.NET组件的工作。