2012-05-04 7 views
1

내가 코코아의alertDidEnd : Objective-C의 void *에 해당하는 모노는 무엇입니까?

- (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 결과에 저장됩니다.

[Export("alertDidEnd:returnCode:contextInfo:")] 
public void alertDidEnd (NSAlert alert, int returnCode, NSObject contextInfo) 
{ 
    Console.WriteLine (returnCode); 
} 

void * 포인터가 NSObject의에 랩됩니다

답변

1

무효 *지도 :

[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은 매개 변수가없는 대리자입니다.

+0

Ta, 나는 그것을 시험해 보겠다. (매개 변수없는 방법을 사용했다면 어떤 버튼이 메시지 상자에 눌려 졌는지 알 수 없습니다.) –

+0

실제로 NSAlert를 사용하지 않는 것처럼 보이므로 실제로 시도한 내용을 게시하면 도움이 될 수 있습니다. 예. myAlert.RunModal()의 반환 값을 확인하면 반환 코드도 제공됩니다. – Curtis

+0

나는 RunModal()이 beginSheetModalForWindow()의 대안이라고 생각했다. 나는 둘 다 부른다고 생각하지 않았다. –

0

당신은 방법을 정의 할 수 있습니다. .NET에서를 IntPtr에

+0

이것은 나를 위해 작동하지 않았다. 질문으로 편집 된 오류 메시지를 참조하십시오. –