在以前用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...