C# 在Xamarin.Mac中注册服务
我正在通过Xamarin.Mac在OS X中注册上下文服务。到目前为止,我已经注册了该服务,编写了它,导出了它的签名,并在Finder中显示了该项目。但是,无论何时调用上下文项,都不会发生任何事情。到目前为止,我有以下几点: 在ApplicationLegate中:C# 在Xamarin.Mac中注册服务,c#,objective-c,mono,xamarin,xamarin.mac,C#,Objective C,Mono,Xamarin,Xamarin.mac,我正在通过Xamarin.Mac在OS X中注册上下文服务。到目前为止,我已经注册了该服务,编写了它,导出了它的签名,并在Finder中显示了该项目。但是,无论何时调用上下文项,都不会发生任何事情。到目前为止,我有以下几点: 在ApplicationLegate中: NSApplication.SharedApplication.ServicesProvider = _servicesProvider; NSUpdateDynamicServices (); //using DllImport(
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 ();
}
声明签名的格式应为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
这对我来说意味着该方法没有正确导出。似乎其他用户也有类似的困惑
更新2
为了确保选择器工作正常,我添加了一个直接消息调用
Messaging.void_objc_msgSend_IntPtr_IntPtr_IntPtr (_serviceProvider.Handle, _selector.Handle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
它完美地执行了操作(我使用了
IntPtr.Zero
,因为签名中需要变量,但在我的测试用例中没有使用)这与我最初问题中的选择器消息相结合,表明ServicesProvider
任务中的某些功能不正常。我已经为此绞尽脑汁了一段时间。方法签名是个问题。错误参数是双指针。c#中的正确方法是:
在我的项目中,它现在可以正常工作了
在以下位置找到双指针的解决方案:
再加上一个,这是一个多么好的问题!难道你没有找到解决这个问题的办法吗?通过创建一个单独的类并使用
Register
和[Export(“foothod::”)
来解决同样的问题,但没有任何效果。不,我没有道歉。然而,我会在将来的某个时候重新讨论这个问题,所以也许我会在那时找到答案。
[Export("testService:userData:error:")]
public void TestService(NSPasteboard pboard, NSString userData, ref IntPtr error)