在Delphi中的DLL调用中的参数传递问题用VC编的DLL中,有三个函数,其原形为:
void* OpenDevice(int nMyAddress, HWND hWnd)
void SetAddLog(void* pDevice, BOOL bAddLog)
void SetCommKey(void* pDevice, LPCTSTR lpCommKey)
请问在Delphi中如何传递参数?谢谢
void* OpenDevice(int nMyAddress, HWND hWnd)
void SetAddLog(void* pDevice, BOOL bAddLog)
void SetCommKey(void* pDevice, LPCTSTR lpCommKey)
请问在Delphi中如何传递参数?谢谢
解决方案 »
- timer 怎么用 可以实现下面功能呢?
- 供大家上传/下载ftp资料的地方
- ??????菜鸟首问:如何把十六进制数存入Byte数组????
- 关于换行的问题
- 如何在程序中动态的配置BDE(提问了一次每人回答,难道各位大虾也不知道? :()
- 如何程序读取Unicode文本?
- 怎样对DBGRID进行增加、修改、删除、保存等操作,能否提供例子?
- 怎么样设置DBEdit的显示格式,列如数字显示成 35,545,676.00
- 三层应用开发的高手们看过来:李维的分布式应用系统篇讲到了使用企业对象的问题,请问如何开发企业对象?
- 在dbgrid中怎样判断当前光标所在的位置是数据表的某一字段(如判断当前光标的位置是否为“姓名”)。
- 为什么在界面里不能输入??(等....)
- active form在web上发布的问题,求助!!
.................
看不到文档,我也写不出来了。
指针(void *)用Pointer,
int = integer
HWND = HWND
Bool = Boolean(?是吗)
LPCTSTR = PCHAR
上边三个就相当于:void* OpenDevice(int nMyAddress, HWND hWnd)
function OpenDevice(nMyAddress: integer; hWnd: HWND): Pointer;void SetAddLog(void* pDevice, BOOL bAddLog)
procedure SetAddLog(pDevice: Pointer; bAddLog: Boolean);void SetCommKey(void* pDevice, LPCTSTR lpCommKey)
procedure SetCommKey(pDevice: Pointer; lpCommKey: PChar);不过, 你要注意,其实要传入的pDevice应该是一个指向结构体的指针。
至于结构体是什么样子 ,我就不知道了你的文档上应该有的。
PDevice = ^TDevice;
TDevice = record
DeviceAddress: integer;
DeviceName: PChar;
end;programe TestDevice;var
myDevice: PDevice;
myAddress: integer;
myCommand: PChar;
begin
myDevice := OpenDevice(myAddress, $00ff); //这里可能会出错,是类型不符,你应该知道如何处理
SetAddLog(myDevice, True); myCommand ;= 'open the door';
SetCommKey(myDevice, myCommand);
end;//这只是一个例子,肯定不能通过compiler
int WINAPI TestC(int i)
{
return i;
} 编译后生成一个DLL文件,在这里我们称该文件为Cpp.dll,该DLL中只有一个返回整数类型的函数TestC。为了方便说明,我们仍然引用上面的调用程序,只是将原来的Button1Click过程中的语句用下面的代码替换掉了。 procedure TForm1.Button1Click(Sender: TObject);
type
TIntFunc=function(i:integer):integer;stdcall;
var
Th:Thandle;
Tf:TIntFunc;
Tp:TFarProc;
begin
Th:=LoadLibrary(’Cpp.dll’); {装载DLL}
if Th>0 then
try
Tp:=GetProcAddress(Th,PChar(’TestC’));
if Tp<>nil
then begin
Tf:=TIntFunc(Tp);
Edit1.Text:=IntToStr(Tf(1)); {调用TestC函数}
end
else
ShowMessage(’TestC函数没有找到’);
finally
FreeLibrary(Th); {释放DLL}
end
else
ShowMessage(’Cpp.dll没有找到’);
end; 这是一个在VC中编译的DLL,在DELPHI中动态调用。