我正在尝试让MultiPeerConnectivity-Framework在 Delphi 中工作。一切都工作正常,直到我需要调用MCNearbyServiceAdvertiserDelegate中的invitationHandler。
procedure TMCNearbyServiceAdvertiserDelegate.advertiser(advertiser: MCNearbyServiceAdvertiser;
didReceiveInvitationFromPeer: MCPeerID; withContext: NSData;
invitationHandler: TMCNearbyServiceAdvertiserDelegateBlockMethod1);
对等方正在相互查找并交换发现信息。“客户端”使用MCNearbyServiceBrowser连接到“服务器”中的MCNearbyServiceAdvertiser。
调用invitationHandler-BlockMethod时,会引发访问冲突:(
现在我已经尝试使用方法imp_implementationWithBlock来获取处理程序的代码:
procedure TMCNearbyServiceAdvertiserDelegate.advertiser(advertiser: MCNearbyServiceAdvertiser;
didReceiveInvitationFromPeer: MCPeerID; withContext: NSData;
invitationHandler: TMCNearbyServiceAdvertiserDelegateBlockMethod1);
var
MainForm: TMainForm;
aImp: procedure(accept: Boolean; session: MCSession); cdecl;
begin
MainForm := application.MainForm as TMainForm;
if MainForm.fSession = nil then
begin
MainForm.fSession := TMCSession.Alloc;
MainForm.fSession.initWithPeer(MainForm.fPeerId);
MainForm.fSessionDelegate := TMCSessionDelegate.Create;
MainForm.fSession.setDelegate(MainForm.fSessionDelegate.GetObjectID);
end;
@aImp := imp_implementationWithBlock(invitationHandler);
aImp(True, MainForm.fSession);
imp_removeBlock(@aImp);
end;
但是使用这种方法,我会得到一个错误,因为我猜invitationHandler不是指针。
来自Kastri的iOSApi.MultiPeerConnectivity.pas中的TMCNearbyServiceAdvertiserDelegateBlockMethod 1的定义:
TMCNearbyServiceAdvertiserDelegateBlockMethod1 = procedure(accept: Boolean; session: MCSession) of object;
我希望这不是太多的信息一次。任何帮助调用该invitationHandler的正确方式将非常感谢!
1条答案
按热度按时间zengzsys1#
终于 解决 了 !
我 在 Delphi 的
System.Net.HttpClient.Mac
单元 中 发现 了 一 个 类似 的 情况 , 在TMacConnectionDataDelegate.URLSessionTaskDidReceiveChallengeCompletionHandler
方法 中 。 块 处理 程序 需要 包含 第 二 个 声明 为Pointer
的 参数 。 我 不 记得 为什么 这样 做 , 我 只 知道 它 是 有效 的 : - )session
参数 也 需要 是Pointer
, 并 使用NSObjectToID
方法 将 您 的 引用 转换 为 该 参数 的 指针 。根据 我 在 问题 中 的 评论 , 您 需要 在 委托 接口 和 实现 中将 块 方法 类型 更改 为
Pointer
( 而 不是TMCNearbyServiceAdvertiserDelegateBlockMethod1
) , 并 如上 所 述 声明 块 处理 程序 方法 , 因此 这 应该 对 您 有效 :中 的 每 一 个