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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章