C# 调用 Delphi Dll链接库方法及示例
每種編程語言調用DLL的方法都不盡相同,在此只對用C#調用Delphi DLL的方法進行介紹
首先要搞清楚一點的是:什么是托管,什么是非托管?
一般可以認為:非托管代碼主要是基于win 32平臺開發的DLL,activeX的組件,托管代碼是基于.net平臺開發的
C# 調用DLL中的非托管函數一般方法
首先,應該在C#語言源程序中聲明外部方法,其基本形式是:
[DLLImport(“DLL文件”)]
修飾符 extern 返回變量類型 方法名稱 (參數列表)
其中:
DLL文件:包含定義外部方法的庫文件。
修飾符: 訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。
返回變量類型:在DLL文件中你需調用方法的返回變量類型。
方法名稱:在DLL文件中你需調用方法的名稱。
參數列表:在DLL文件中你需調用方法的列表。
注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。
????? DllImport只能放置在方法聲明上。
DLL文件必須位于程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。
返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。
下面結合示例如:
??????? [DllImport("TestDll.dll", EntryPoint = "SayHello")]??????"TestDll.dll"為dll名稱,EntryPoint 為函數名
??????? static extern string SayHello(string Name);????????????? //delphi 中的函數
??????? private string GetMessage()????????????????????????????????? //C#自己寫的函數,并調用Dll函數
??????? {
??????????? return SayHello("");
??????? }
? 當前程序中調用 GetMessage時就會返回Dll SayHello 函數的內容
其中,Dll SayHello函數如下(Delphi語言):
function SayHello(NameTool:PChar):PChar;stdcall;
? begin
??? if Length(NameTool) <=0 then
????? Result := PChar('Hello Person,welcome to chian.')
??? else
????? Result := PChar('Hello '+ NameTool + ', welcome to chian.');
? end;
另外,如果需要調用傳值,的方法時,通過Delphi的參數 var 與C#中的ref關鍵字結合使用如:
procedure ChangeNumber(var number:Integer);stdcall;
? begin
??? number := 100;
? end;
C#調用如下:
private int MyNumber = 150;
[DllImport("TestDll.dll", EntryPoint = "ChangeNumber")]
?static extern void ChangeNumber(ref int count);
?private void Changes()
?{
?????ChangeNumber(ref MyNumber);
?}
當C#程序中調用? Changes方法后,MyNumber的值將會改變為100
以上為C#簡單調用Delphi Dll的方法。其中要注意的有:
DLL文件必須位于程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。
返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。
?
?
轉載于:https://www.cnblogs.com/youshan/archive/2012/03/31/2426529.html
總結
以上是生活随笔為你收集整理的C# 调用 Delphi Dll链接库方法及示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecshop 手机版的php代码在哪里,
- 下一篇: HTML +CSS 制作个人简历