Wie kann ein SafeHandle in einer P / Invoke-Signatur verwendet werden, die in bestimmten Fällen einen Nullzeiger benötigt?

8

Hoffentlich ist dies für SO nicht allzu unklar, aber beachte die folgende P / Invoke-Signatur:

%Vor%

Ich möchte diese Signatur folgendermaßen neu entwerfen, um SafeHandles zu verwenden:

%Vor%

laut MSDN Das Argument InputHandle muss ein Nullzeiger sein, wenn das HandleType-Argument SQL_HANDLE_ENV und andernfalls ein Nicht-Null-Zeiger ist.

Wie erfasse ich diese Semantik in einer einzigen P / Invoke-Signatur? Bitte fügen Sie eine Beispiel-Call-Site in Ihre Antwort ein. Meine derzeitige Lösung besteht darin, zwei Signaturen zu verwenden.

    
davidzarlengo 03.12.2011, 18:44
quelle

2 Antworten

4

SafeHandle ist eine Klasse, daher sollten Sie null statt einer tatsächlichen SafeHandle übergeben können. Eine Nullreferenz wird in P / Invoke als Nullzeiger gemarshallt.

%Vor%     
shf301 03.12.2011, 18:50
quelle
1

Die Antwort von shf301 übergibt null für das Eingabeargument InputHandle . Dies funktioniert bei den meisten APIs nicht (vielleicht tut es das für das spezifische Problem des OP, da sie die Antwort akzeptiert haben).

Ich benutze dieses Muster:

%Vor%

Es bedeutet, dass ich dies tun kann, um ein Null-Handle zu übergeben:

%Vor%

Es ist ähnlich wie ein IntPtr.Zero statischer Member.

    
Daniel Earwicker 09.12.2013 18:07
quelle

Tags und Links