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