gpt4 book ai didi

c# - 在 Xamarin.Mac 中注册服务

转载 作者:行者123 更新时间:2023-12-01 06:25:48 27 4
gpt4 key购买 nike

我正在通过 Xamarin.Mac 在 OS X 中注册上下文服务。到目前为止,我已经注册了服务,编写了它,导出了它的签名并让项目出现在 Finder 中。但是,每当我调用上下文项时,什么都没有发生。到目前为止,我有以下内容;

在 ApplicationDelegate 中:

NSApplication.SharedApplication.ServicesProvider = _servicesProvider;
NSUpdateDynamicServices (); //using DllImport(Constants.AppKitLibrary) on an extern method

然后我在注册到我的服务的 NSObject 上有以下方法签名,应该调用它:
[Export("testService:userData:error:")]
public void TestService(NSPasteboard pboard, NSString userData, NSString error)
{
TestAction ();
}

Apple Documentation 声明签名应该是 messageName:userData:error: 的形式,我相信我有,但是,它还引用了所需签名中的双 NSString 指针,即:
- (void)simpleEncrypt:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error

这让我认为该方法没有正确匹配。

有什么建议吗?

更新

我把头伸进系统日志,发现了这个;
Cannot find service provider for selector testService:userData:error: or testService:: for service testService

这对我说该方法没有正确导出。似乎另一个用户 here 也有类似的困惑。

更新2

为了确保我的选择器正常工作,我添加了直接消息调用;
Messaging.void_objc_msgSend_IntPtr_IntPtr_IntPtr (_serviceProvider.Handle, _selector.Handle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

哪个执行的操作非常好(我使用了 IntPtr.Zero,因为变量在签名中是必需的,但在我的测试用例中没有使用)结合我最初问题中的选择器消息表明某些东西在 ServicesProvider 分配中无法正常工作。

最佳答案

我一直在努力解决这个问题。方法签名是问题所在。错误参数是一个双指针。 c#中正确的方法是:

[Export("testService:userData:error:")]
public void TestService(NSPasteboard pboard, NSString userData, ref IntPtr error)

它现在在我的项目中没有问题。

在以下位置找到双指针的解决方案:
https://forums.xamarin.com/discussion/56064/binding-project-nsmutablearray-pointer

关于c# - 在 Xamarin.Mac 中注册服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28814270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com