别人给的VC++写的测试程序调用都OK没问题,我用的是FreePascal的Lazarus开发就调用不了;
我在Lazarus下面程序编译正常,但无论使用静态包含调用,还是动态LoadLibrary调用都失败;静态调用的话窗体没显示,动态调用报错找不到dll文件Load失败;
静态:
const
PAlib = 'PA200CDll.dll';
procedure Scan_LED_ON();cdecl;external PAlib;
procedure Scan_LED_OFF()cdecl;external PAlib;
procedure BEE_ON(Time:Integer);cdecl;external PAlib;
function Barcode_Read():Boolean;cdecl;external PAlib;
function Barcode_Open():Boolean;cdecl;external PAlib;
function Barcode_Close():Boolean;cdecl;external PAlib;
function Get_Barcode_Data(Buffer:Pointer):Integer;cdecl;external PAlib;
动态:
type
TIntFunc=procedure(i:integer);cdecl;stdcall;
var
Th:TLibHandle;
Tf:TIntFunc;
Tp:Pointer;
begin
Th:=LoadLibrary('PA200CDll.dll'); {装载DLL,//'PA200CDll.'+SharedSuffix}
if Th>0 then
try
Tp:=GetProcedureAddress(Th,PChar('BEE_ON'));
if Tp<>nil then
begin
Tf:=TIntFunc(Tp);
Tf(300); {调用BEE_ON函数}
end
else
ShowMessage('BEE_ON函数没有找到');
finally
FreeLibrary(Th); {释放DLL}
end
else
ShowMessage('PA200CDll.dll没有找到');
核对了文件名,修改了绝对路径,改stdcall和cdecl方式,都不行,不知道是什么问题?求助各位!
7 个解决方案
#1
问题找到了,动态报错是Th>0改成Th<>0,
静态调用失败是有个procedure BEE_ON(Time:Integer);cdecl;external PAlib;函数名不对,试出来的。
谢谢大家。
静态调用失败是有个procedure BEE_ON(Time:Integer);cdecl;external PAlib;函数名不对,试出来的。
谢谢大家。
#2
不错不错,顶一下
#3
有用,值得借鉴。
#4
#5
学习下,加下积分。
#6
还有人用FreePascal开发wince程序,真少见。FreePascal弄出来的东西太大了吧。
#7
做 CE 这么久了,还第一次听说 FreePascal 这个东东
#1
问题找到了,动态报错是Th>0改成Th<>0,
静态调用失败是有个procedure BEE_ON(Time:Integer);cdecl;external PAlib;函数名不对,试出来的。
谢谢大家。
静态调用失败是有个procedure BEE_ON(Time:Integer);cdecl;external PAlib;函数名不对,试出来的。
谢谢大家。
#2
不错不错,顶一下
#3
有用,值得借鉴。
#4
#5
学习下,加下积分。
#6
还有人用FreePascal开发wince程序,真少见。FreePascal弄出来的东西太大了吧。
#7
做 CE 这么久了,还第一次听说 FreePascal 这个东东