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.

Другие вопросы по тегам