alertDidEnd: Что такое моно-эквивалент пустоты Objective-C *?
Я пытаюсь реализовать метод, основанный на какао
- (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
Проблема в параметре типа void*. Я не знаю, что такое эквивалент C# для указателя на void.
Я пытался небезопасно выполнить "void*", но, видимо, это не то же самое. Я также попробовал просто "void", но компилятор C# утверждает, что void нельзя использовать в качестве типа параметра.
Есть идеи?
Error CS0123: A method or delegate `MyProgram.MainWindow.alertDidEnd(MonoMac.AppKit.NSAlert, int, MonoMac.Foundation.NSObject)' parameters do not match delegate `MonoMac.Foundation.NSAction()' parameters (CS0123)
Обновление (после устранения проблемы):
Это вызов и метод, который сделал эту работу:
alert.BeginSheet ((NSWindow)sender, this, new Selector ("alertDidEnd:returnCode:contextInfo:"), IntPtr.Zero);
[Export("alertDidEnd:returnCode:contextInfo:")]
public void alertDidEnd (NSAlert alert, int result, IntPtr ci)
{}
Первый отображает предупреждение, прикрепленное к окну, второй - объявление метода функции, вызываемой при отклонении предупреждения. Результат сохраняется в int result.
2 ответа
void* отображается на IntPtr в.net:
[Export("alertDidEnd:returnCode:contextInfo:")]
public void alertDidEnd (NSAlert alert, int returnCode, IntPtr contextInfo)
{
Console.WriteLine (returnCode);
}
Вы можете посмотреть здесь рабочий пример:
https://github.com/picoe/Eto/blob/master/Source/Eto.Platform.Mac/Forms/MacModal.cs
Кроме того, из вашего сообщения об ошибке видно, что вы должны просто использовать простой метод без параметров для всего, с чем вы его используете. NSAction является делегатом без параметров.
Вы можете определить метод как:
[Export("alertDidEnd:returnCode:contextInfo:")]
public void alertDidEnd (NSAlert alert, int returnCode, NSObject contextInfo)
{
Console.WriteLine (returnCode);
}
void *
указатель будет заключен в объект NSObject.