C# 調(diào)用Delphi dll 實(shí)例代碼
delphi dll 源碼:
library dllres;
type
char10 = array[0..9] of char;
TMydata = packed record
id: Integer;
name: char10;
married: Boolean;
salary: Double;
end;
PMydata = ^TMydata;
const
RESSTR: array[0..4] of string = ('HELLO', 'COLOR', 'DELPHI', 'shared', 'library');
NO_RESULT= 'no result';
var
mydata: TMydata;
{$R *.res}
// 返回字符串指針
function getResStr(aindex: Integer): PChar; stdcall;
begin
if aindex < Length(RESSTR) then
begin
Result := pchar(RESSTR[aindex]);
end
else
begin
Result := pchar(NO_RESULT);
end;
end;
// 返回結(jié)構(gòu)體指針
function getMydata: PMydata; stdcall;
begin
with mydata do
begin
id := 123;
name := 'obama';
married := false;
salary := 1200;
end;
Result := @mydata;
end;
exports getResStr, getMydata;
begin
end.
C# 調(diào)用示例:
class Invoke_Delphi_Dll_Exam
{
[DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr getResStr(int index);
[DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr getMydata();
public struct Mydata
{
public int id; //0
public string name; //4
public bool married; //24
public double salary; //25
public Mydata(byte[] data)
{
if (data != null && data.Length == 33) {
id = BitConverter.ToInt32(data, 0);
name = Encoding.Unicode.GetString(data, 4, 20).Replace("\0",""); // 去掉尾部的0字符
married = BitConverter.ToBoolean(data, 24);
salary = BitConverter.ToDouble(data, 25);
}
else {
id = 0;
name = String.Empty;
married = false;
salary = 0;
}
}
public override string ToString()
{
return String.Format("id: {0}, name: {1}, married: {2}, salary: {3}",
id, name, married, salary);
}
}
private static void Main(string[] args)
{
Console.WriteLine(Marshal.PtrToStringAuto(getResStr(0)));
byte[] data = new byte[33];
Marshal.Copy(getMydata(), data, 0, 33);
Mydata mydata = new Mydata(data);
Console.WriteLine(mydata);
}
}
- C#中加載dll并調(diào)用其函數(shù)的實(shí)現(xiàn)方法
- C#調(diào)用Matlab生成的dll方法的詳細(xì)說(shuō)明
- C#中調(diào)用DLL時(shí)未能加載文件或程序集錯(cuò)誤的處理方法(詳解)
- C# 編譯生成dll文件供程序調(diào)用的兩種方法
- C#調(diào)用C++dll方法步驟
- C#調(diào)用C++DLL傳遞結(jié)構(gòu)體數(shù)組的終極解決方案
- C#使用DllImport調(diào)用非托管的代碼的方法
- C#調(diào)用C++版本dll時(shí)的類(lèi)型轉(zhuǎn)換需要注意的問(wèn)題小結(jié)
- c# 調(diào)用dll的幾種方式
相關(guān)文章
C#實(shí)例代碼之抽獎(jiǎng)升級(jí)版可以經(jīng)表格數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),抽獎(jiǎng)設(shè)置,補(bǔ)抽
這篇文章主要介紹了C#實(shí)例代碼之抽獎(jiǎng)升級(jí)版可以經(jīng)表格數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),抽獎(jiǎng)設(shè)置,補(bǔ)抽 的相關(guān)資料,需要的朋友可以參考下2016-01-01C#實(shí)現(xiàn)計(jì)算一個(gè)點(diǎn)圍繞另一個(gè)點(diǎn)旋轉(zhuǎn)指定弧度后坐標(biāo)值的方法
這篇文章主要介紹了C#實(shí)現(xiàn)計(jì)算一個(gè)點(diǎn)圍繞另一個(gè)點(diǎn)旋轉(zhuǎn)指定弧度后坐標(biāo)值的方法,涉及C#針對(duì)坐標(biāo)的數(shù)學(xué)運(yùn)算相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#使用SqlServer作為日志數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于C#使用SqlServer作為日志數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01舉例講解C#中自動(dòng)實(shí)現(xiàn)的屬性
這篇文章主要介紹了C#中自動(dòng)實(shí)現(xiàn)的屬性,包括使用自動(dòng)實(shí)現(xiàn)的屬性實(shí)現(xiàn)輕量類(lèi)的方法,需要的朋友可以參考下2016-01-01C# 多線程對(duì)資源讀寫(xiě)時(shí)如何控制的方法
這篇文章主要介紹了C# 多線程對(duì)資源讀寫(xiě)時(shí)如何控制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06詳解Unity 實(shí)現(xiàn)語(yǔ)音識(shí)別功能
語(yǔ)言識(shí)別功能已經(jīng)在我們身邊普遍流行起來(lái),在unity開(kāi)發(fā)中語(yǔ)音識(shí)別也非?;馃?,今天就介紹下Unity自帶的語(yǔ)音識(shí)別功能的實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧2021-05-05基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法
這篇文章主要介紹了基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法的相關(guān)資料,需要的朋友可以參考下2015-12-12