Delphi :Windows服务调用DLL的方法:访问违规错误

brc7rcf0  于 2022-11-23  发布在  Windows
关注(0)|答案(1)|浏览(258)

我有一个 Delphi 柏林Windows服务,它将调用一个Delphi11DLL。这个Delphi 11 DLL具有REST API调用。我已经使用以下代码从我的服务中调用DLL方法:

function RESTAPICall(sURL, sDomain, sID, sJson: String;
    var slLog: TStringList) : Boolean; stdcall; External Restcall.dll' name 'RESTAPICall' delayed;

然后我在Windows服务的OnTimer()事件中调用这个DLL方法,但是它在运行时抛出一个访问冲突错误:
模块'Restcall. dll'中地址633381F4处发生访问冲突。读取地址FFFFFFFC。
有时候我也会收到这个AV错误:
模块borlndmm.dll中地址21285195处的访问冲突。写入地址6347C370。
请注意,此错误仅发生在服务调用期间,如果我从EXE调用DLL,它将正常工作。

rekjcdws

rekjcdws1#

简而言之:您不能在应用程序和DLL之间直接传递字符串或动态数组。您需要执行下列操作之一:
1.通过uses将其作为第一个单元,对应用程序和DLL使用相同的内存管理器。
1.将DLL函式设计成接受PChar,而不是String
注:我在很多项目中使用了FastMM,但我不知道它是否与 Delphi Alexandria一起工作。

相关问题