C#中调用PB的DLL

首先要知道这个DLL中提供了那些方法,这些方法是怎么声明的。如下面这两种形式:

function ShowRPMenuList (SQLConnPChar:PChar; FBCID:PChar):Integer;

function GetRPMenuList(RPTConnString:Pchar;FBCID:Pchar):PChar;

 

然后就是做一些准备工作了:

1、在C#程序主目录下建立一个Lib文件夹,将所有的DLL文件都可以放里面,然后在VS中的解决方案资源管理器中项目名上点右键,选择属性,点击生成事件,在生成后事件命令行下的文本框中写下面语句:copy $(SolutionDir)lib/(DLL文件名)

DllImport会按照顺序自动去寻找的地方:
1、exe所在目录
2、System32目录
3、环境变量目录
所以只需要你把引用的DLL 拷贝到这三个目录下 就可以不用写路径了

2、现在可以在程序中调用不带类型库的 DLL 中的函数了,一般把所有调用方法放在一个类里,并且这些调用方法要定义成静态的(static),格式如下:

[DllImport("xxx.dll", CharSet = CharSet.Ansi)]

public static extern IntPtr get_file(string szHostAddr, string szRemoteFile, string szLocalFile, short option);

[DllImport("yyy.dll", CharSet = CharSet.Ansi, EntryPoint = "PGREC_CreateRecordObject")]

public static extern IntPtr CreateRecordObject(PGLIB_DATA_TYPE dataType);

解释:

、前面的public static extern可以作为固定格式来写。

Integer型转换成IntPtr,其实作为返回值的Integer型多数情况下和bool型的性质一样,在C#程序里判断返回值是不是等于IntPtr.Zero

PChar型就是C#中的string型。

、后面的EntryPoint = "PGREC_CreateRecordObject"是对应PB中的函数名。

       3、现在在程序里就可以调用这个PB中的方法了 (类名.方法名)

发布了73 篇原创文章 · 获赞 5 · 访问量 33万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章