1

Cocoa に基づいたメソッドを実装しようとしています。

- (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;

問題は void* 型のパラメータです。voidへのポインターに相当するC#が何であるかわかりません。

「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)
{}

1 つ目は、ウィンドウにアタッチされたアラートの表示です。2 つ目は、アラートが閉じられたときに呼び出される関数のメソッド宣言です。結果は int result に格納されます。

4

2 に答える 2

1

void* は .net の IntPtr にマップされます。

[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 は、パラメーターを持たないデリゲートです。

于 2012-05-10T16:57:04.203 に答える