C 中如何呼叫Delphi寫的Dll

2022-01-18 18:44:49 字數 1165 閱讀 6847

在以前用delphi開發的專案中,會經常用到tchart這個畫圖控制項,它本身很強大,支援各類圖,如點線圖,柏拉圖,柱狀圖等等,加上可以輸出成bmp,jpeg,jpg,svg,gif等各種格式,很好用,當時也封裝成比較獨立的dll檔案。這次開發.net程式正好派上用場。

幾個關鍵技術點:

1 c#要以非託管方式呼叫dll

2 c#把整理好的畫圖資料生成事先定義好格式的xml檔案,傳給dll

3 dll解析xml檔案,根據相應格式,要求,畫圖

4 dll輸出gif檔案(經過比較gif影象失真率小,且檔案大小最小)

5 c#裝載gif檔案,傳到前台展示

關鍵**:

c#以下是引用片段:

#region 定義呼叫delphi寫的畫圖dll

///

/// 定義呼叫delphi寫的畫圖dll

///

private class drawchartfromdll

#endregion

public chartresultdata getcharts(chartdata _chartdata, hashtable _hotpriadditionseqno, hashtable _hotsecadditionseqno)

catch (exception err)

...

//呼叫delphi,取得返回引數

int _return = -1;

try

catch (exception err)

else }

//刪除臨時生成的xml檔案

this.deletetempfile(_xmlfilename);

...

}delphi

沒有什麼特別的注意事項,和其它的dll基本一樣,注意string換成pchar就可以了。

以下是引用片段:

function getchartfromxmlbynet(picharttype: integer; psxmlfilename: pchar; psprichartfilename: pchar; pssecchartfilename: pchar; out psprihotmsg: pchar; out pssechotmsg: pchar): integer; stdcall;export;

結構圖:

C 呼叫Delphi寫的DLL

在c 中可以這樣呼叫 呼叫 這裡需要注意的是要外傳的pchar型別引數,在c 中對應使用stringbuilder,如果使用string沒有任何資訊傳出,如果使用ref string形式,則會出現記憶體錯誤。在c 中可以這樣呼叫 呼叫 經過測試 delphi中integer的引數使用c 中的int即...

Delphi動態呼叫C 寫的DLL

c dll 檔案,建議用最簡單的c 編輯工具。不會加入很多無關的dll檔案。本人用codeblocks mingw。不像 vs2010,dll編譯成功,呼叫的時候會提示缺其他dll。系統生成的main.h和main.cpp ifndef main h define main h include to...

關於delphi呼叫c 寫的webservice

因為這次專案涉及到跨平台的,所採用delphi呼叫webservice 一開始的時候用delphi自動生成wsdl。呼叫hellowordl成功。非常開心,可是問題來了,helloworld是不需要傳引數,於是我就寫了乙個簡單的函式 public string returnstr string tt...