Delphi 动态调用C的DLL,报错。
delphi吧
全部回复
仅看楼主
level 7
gongjun527 楼主
金橙子 镭雕板卡二次开发的时候遇到一些问题,搞了好久,也搞不定 请大神门帮忙看看
2018年06月20日 08点06分 1
level 7
gongjun527 楼主
有偿帮助也行。
// DLL调用的说明文档。
//下面的Delphi的代码,Delphi版本是XE10.2
type
Tlmc1_Initial = function(strEzCadPath: PAnsiChar; bTestMode: Boolean; hOwenWnd: THandle): Integer; cdecl; //定义一个函数类型,注意一点过程类型种的参数应该与DLL中用到的方法的参数一致。
Tlmc1_LoadEzdFile = function(strFileName: PChar): Integer; stdcall;
procedure TForm1.btn_InitialClick(Sender: TObject);
var
st, i: Integer;
Handle: THandle;
P_Initial: PInteger;
Initial: Tlmc1_Initial;
path: string;
begin
path := ExtractFilePath(ParamStr(0));
try
Handle := LoadLibrary(PChar('MarkEzd.dll'));
if Handle > 0 then//加载成功就执行。
Memo1.Lines.Add('激光动态库载入成功!' + ' 句柄值:' + inttostr(Handle))
else
begin
Memo1.Lines.Add('激光动态库载入错误!' + ' 错误代码:' + inttostr(Handle));
Exit
end;
Initial := GetProcAddress(Handle, PAnsiChar('lmc1_Initial')); //取函数的地址。
if Assigned(Initial) then //如果函数存在就调用
begin
st := Initial(PAnsiChar(path), False, Handle);
case st of
0:
Memo1.lines.add('控制卡初始化成功!');
1:
Memo1.lines.add('发现EZCAD已经运行!');
2:
Memo1.lines.add('找不到EZCAD.CFG');
3:
Memo1.lines.add('打开LMC1失败');
4:
Memo1.lines.add('没有有效的lmc1设备');
5:
Memo1.lines.add('lmc1版本错误');
6:
Memo1.lines.add('找不到设备配置文件');
7:
Memo1.lines.add('报警信号');
8:
Memo1.lines.add('用户停止');
9:
Memo1.lines.add('不明错误');
10:
Memo1.lines.add('超时');
11:
Memo1.lines.add('未初始化');
12:
Memo1.lines.add('读文件错误');
13:
Memo1.lines.add('窗口为空');
14:
Memo1.lines.add('找不到指定名称的字体');
15:
Memo1.lines.add('错误的笔号');
16:
Memo1.lines.add('指定名称的对象不是文本对象');
17:
Memo1.lines.add('保存文件失败');
18:
Memo1.lines.add('找不到指定对象');
19:
Memo1.lines.add('当前状态下不能执行此操作');
end;
Memo1.SelStart := Length(Memo1.Text);
Memo1.SelLength := 0;
Memo1.Perform(EM_SCROLLCARET, 0, 0);
end
else
begin
Memo1.Lines.Add('找不到函数!');
raise Exception.Create('GetProcAddress 调用失败,错误代码:' + inttostr(getlasterror));
end;
finally
FreeLibrary(Handle);
end;
end;
2018年06月20日 08点06分 2
level 7
gongjun527 楼主
运行到这段代码时出错 st := Initial(PAnsiChar(path), False, Handle);
2018年06月20日 08点06分 3
level 9
解决了吗 qq 325829 5530
2018年06月20日 09点06分 4
没呢
2018年06月20日 09点06分
已经加您qq了
2018年06月20日 09点06分
level 12
一、确定是cdecl,不是stdcall?
二、TCHAR* 建议用PCHAR
三、BOOL是四字节,boolean肯定不是四字节,建议用longbool
2018年06月21日 01点06分 5
谢谢 ,是参数传入错误
2018年06月21日 06点06分
level 8
来来 加我
2018年06月21日 02点06分 6
谢谢您,四楼的朋友已经帮我解决!谢谢
2018年06月21日 06点06分
level 1
我现在工作需开发一个应用,检查光雕内容是否与数据库数据一致,大神能指导下吗,非常感谢!
2020年06月03日 07点06分 7
level 4
最近也打算做金橙子的二开,楼主能加个好友麽?
2020年06月12日 23点06分 8
1