Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Xamarin.Mac中注册服务_C#_Objective C_Mono_Xamarin_Xamarin.mac - Fatal编程技术网

C# 在Xamarin.Mac中注册服务

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(

我正在通过Xamarin.Mac在OS X中注册上下文服务。到目前为止,我已经注册了该服务,编写了它,导出了它的签名,并在Finder中显示了该项目。但是,无论何时调用上下文项,都不会发生任何事情。到目前为止,我有以下几点:

在ApplicationLegate中:

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)