有一个第三方的vc写的dll,由于某种原因,该dll导出的函数都写成了cdecl的形式,所以我在delphi中也对应写了cdecl形式的调用声明,其中有一个函数是这样的:
void IsCapturing(int iCardID, BOOL* bIsCapturing);
我写成了:
procedure IsCapturing(iCardID:Integer;bIsCapturing:PBoolean);cdecl;
external 'aa.dll' name 'IsCapturing';
可是当我用如下方法调用时,调用完后,程序总是出现莫明奇妙的异常。。地址访问失败之类的。调用如下:
var
IsCapturing:Boolean;
begin
IsCapturing(0,@IsCapturing);
Result:=IsCapturing;
end;一开始我百思不得其解,后来尝试着写成这样:
var
pIsCapturing:PBoolean;
begin
new(pIsCapturing);
IsCapturing^:=false;
IsCapturing(0,pIsCapturing);
Result:=pIsCapturing^;
dispose(pIsCapturing);
end;
却一点问题都没有了,我在想是不是delphi对变量进行了优化的结果阿??希望高手指点
void IsCapturing(int iCardID, BOOL* bIsCapturing);
我写成了:
procedure IsCapturing(iCardID:Integer;bIsCapturing:PBoolean);cdecl;
external 'aa.dll' name 'IsCapturing';
可是当我用如下方法调用时,调用完后,程序总是出现莫明奇妙的异常。。地址访问失败之类的。调用如下:
var
IsCapturing:Boolean;
begin
IsCapturing(0,@IsCapturing);
Result:=IsCapturing;
end;一开始我百思不得其解,后来尝试着写成这样:
var
pIsCapturing:PBoolean;
begin
new(pIsCapturing);
IsCapturing^:=false;
IsCapturing(0,pIsCapturing);
Result:=pIsCapturing^;
dispose(pIsCapturing);
end;
却一点问题都没有了,我在想是不是delphi对变量进行了优化的结果阿??希望高手指点
解决方案 »
- 哪位高手用过ExpressPrinting System Suite?
- 求助关于如何清空打印机缓存!
- 有个问题急需解决后新开贴高分相送
- 请教!如何将TDBLOOKUPCOMBOBOX的对象的datasource赋成空值?
- 关于使用BinToHex的问题,请大家帮忙!!!!!!!!!!!!!!!!!!!!
- 散分都不行!!!!晕
- 如何计算一个控件左上角在屏幕中坐标,我想另一个窗体能正挨着他的下方出现
- 哪有Delphi6的免费第三方控件可下载,我现在很需要,请各位大哥帮忙。
- 那里能找到 Skin Engine 1.6
- 这个涉及BDE安装程序好难做,Delphi高手请进。
- 关于类的问题,想问一下,可能有些简单了
- 一个简单的问题!
我觉得可能和它使用cdecl有关。。
external 'aa.dll' name 'IsCapturing';
//??????????
var
IsCapturing:Boolean;//??????????
begin
IsCapturing(0,@IsCapturing);
Result:=IsCapturing;
end;//一样?????????
Windows, Types, ...;Procedure IsCapturing(iCardID:Integer; Var bIsCapturing: BOOL); CDecl; External 'aa.dll' Name 'IsCapturing';
或者
Procedure IsCapturing(iCardID:Integer; Var bIsCapturing: LongBool); CDecl; External 'aa.dll' Name 'IsCapturing';顺便问一下,你在用哪块捕捉卡啊?好眼熟……