62,616
社区成员
发帖
与我相关
我的任务
分享
function AddOnPushButtonEvent(pushButtonEvent: TPushButtonEvent): integer; stdcall;
begin
result := -1;
try
TApi.Instance.pushButtonEventList.Add(pushButtonEvent);
result := 0;
except
end;
end;
TPushButtonEvent = procedure(interAddress: Integer; light: Integer; number: Integer; controllerid: integer) of object;
public class DllImportDefine {
public interface ISysControllerApi_Callback_PushButtonEvent extends StdCallCallback {
public void PushButtonEvent(int interAddress, int light, int number, int controllerID);
}
public interface ISysControllerApi extends Library {
public ISysControllerApi sysControllerApi = (ISysControllerApi) Native.loadLibrary("c:\\Windows\\System32\\SysControllerApiForJava\\SysControllerApi2", ISysControllerApi.class);
public int OpenController(String customSearchDeviceList);
public int AddOnPushButtonEvent(ISysControllerApi_Callback_PushButtonEvent pushButtonEvent);
}
// main gui form中,点击按钮后:
sysControllerApi.AddOnPushButtonEvent(sysControllerApi_Callback_PushButtonEvent);
public static class SysControllerApi_Callback_PushButtonEvent implements DllImportDefine.ISysControllerApi_Callback_PushButtonEvent {
public void PushButtonEvent(int interAddress, int light, int number, int controllerID) {
// 并没有进来
JOptionPane.showMessageDialog(null, String.format("%d,%d,%d,%d", interAddress, light, number, controllerID));
}
}
if Assigned(pushButtonEventList) then
begin
// ShowMessage('p6');
for i := 0 to pushButtonEventList.Count - 1 do
begin
ShowMessage('had event,count:' + inttostr(pushButtonEventList.Count));
ShowMessage(Format('light:%d number:%d conrollerId:%d', [StrToInt(data[3]), TFunctions.HexToInt(data[5] + data[4]), sysController.id]));
showmessage(format('event handle:%p',[@pushButtonEventList[0]]));
pushButtonEventList[i](interAddress, StrToInt(data[3]), TFunctions.HexToInt(data[5] + data[4]), sysController.id);
end;
end;
except
on ex: exception do
begin
ShowMessage('pe:' + ex.Message);
AppendSysControllerApiLog(string.Format('[error] PushButton_TAL600_Report 触发事件-拍灯上报反馈 %s', [ex.Message]));
raise;
end;
end
delphi尝试执行这个java传进来的回调函数时,
pushButtonEventList[i](interAddress, StrToInt(data[3]), TFunctions.HexToInt(data[5] + data[4]), sysController.id);
发生了内存访问的错误