最近在寫一個介面,但是Demo是C# 的。在C# 可以呼叫DLL函式。
我卸載Delphi 中為什么不能呼叫,而且導致我的主程式呼叫我的DLL都打不開了。
C# 代碼如下 :
using System;
using System.Runtime.InteropServices;
namespace HotelLockDll
{
[ComVisible(true)]
public interface iHotelLockDll
{
void CloseCom();
int OpenCom(string ComName);
void p_beep(byte num);
string Read_ID();
string Reading_IC_Card();
}
}
我Delphi定義DLL的函式的代碼如下:
procedure CloseCom(); stdcall; external 'HotelLockDll.DLL'; //關閉埠 name 'CloseCom'
function OpenCom(ComName:string):Integer ;stdcall; external 'HotelLockDll.DLL' ; //打開埠 name 'OpenCom'
procedure p_beep(num:byte);stdcall; external 'HotelLockDll.DLL'; //響聲 name 'p_beep'
function get_flag1():byte;stdcall; external 'HotelLockDll.DLL' ; //name 'get_flag1'
function Read_ID():string ; stdcall; external 'HotelLockDll.DLL'; //讀ID卡 name 'Read_ID'
function Reading_IC_Card():string; stdcall; external 'HotelLockDll.DLL' ; //讀身份證 name 'Reading_IC_Card'
請各位大神,求救!!!
uj5u.com熱心網友回復:
有沒有這個dll的原形定義uj5u.com熱心網友回復:
一般都是引數型別的問題uj5u.com熱心網友回復:
HotelLockDll.dll是什么語言寫的,如果是C#寫的話,要使用com的方式Delphi才能呼叫,如果是C或C++或Delphi寫的,可以直接呼叫,跨語言之間的呼叫最好不要使用string,最好使用PChar,堅持記憶體誰申請誰釋放的原則。uj5u.com熱心網友回復:
比較支持這種說法,總感覺C#寫出來的所謂DLL并非真正意義上的WINDOWS標準DLL
uj5u.com熱心網友回復:
注意DLL之間使用的型別要一致,才能相互呼叫。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97410.html
標籤:VCL組件開發及應用
