2009-08-17 5 views
1

Wenn ich versuche, eine Zeichenfolge, die wirklich ein NULL-Zeiger ist, zu marshallen, was passiert?Was passiert, wenn ich einen Nullzeiger mit der [MarshalAs (UnmanagedType.LPStr)] marschiere

+1

Ich weiß nicht umgeleitet. Probieren Sie es aus und sagen Sie es uns. – JoshJordan

+0

Ja, ich bin gerade mitten in einer unordentlichen Interop-Konvertierung, die noch eine Stunde dauern wird, bevor ich es kompilieren kann, ohne dass ich eine Menge Zeit damit verbringen muss, in einem separaten Projekt zu testen. – DevDevDev

Antwort

2

Von nativ zu verwaltet erhalten Sie ein Null-String-Objekt. Von verwaltet zu nativ erhalten Sie einen Nullzeiger. Es ist ziemlich intuitiv. :-)

+0

Cool, das ist, was ich mir erhofft habe. Sie erhalten die Null-Zeichenfolge nicht die leere Zeichenfolge und definitiv kein Fehler? – DevDevDev

+0

Ja, das stimmt. –

0

Nun, was denkst du? LPstr ist ein Zeiger auf ein nullterminiertes Array von ANSI-Zeichen. NULL ist offensichtlich kein Zeiger auf ein nullterminiertes Array. Es wird wahrscheinlich versuchen, von NULL oder etwas zu lesen. In jedem Fall ist es undefined Verhalten, wird es zum Absturz Ihrer App oder lassen Sie es in unbekanntem Zustand. Warum willst du das ? Warum nicht einfach vor dem Mashalling überprüfen?

+0

Wie kann ich ein Attribut prüfen? dann muss ich ein IntPtr marshalen. – DevDevDev

0

Ich denke, es wird NULL an die zugrunde liegende API übergeben, die möglicherweise keine akzeptable Eingabe ist, je nachdem, was Sie anrufen. Die meisten anständig entworfenen C (++) Code-Checks für diese Art von Sache, aber es ist am besten, zu überprüfen.

1

Ein NULL-Wert, wenn typisierte als Zeichenkette wird die jeweilige Sprachdarstellung NULL übersetzt werden, wenn sie in beiden Richtungen (NULL für C und null für C#)

Verwandte Themen