2009-08-17 48 views
1

如果我嘗試編碼一個真正爲NULL指針的字符串,會發生什麼?如果我使用[MarshalAs(UnmanagedType.LPStr)]編組一個空指針,會發生什麼?

+1

我不知道一個空值。嘗試一下並告訴我們。 – JoshJordan 2009-08-17 02:32:03

+0

是的,我現在正處在一個混亂的Interop轉換中,在我編譯之前還有一個小時,想知道如何在一個單獨的項目中花費大量的時間測試。 – DevDevDev 2009-08-17 02:35:04

回答

2

從原生到託管,您會得到一個空字符串對象。從託管到本地,你會得到一個空指針。這很直觀。 :-)

+0

很酷,這正是我所希望的。你得到空字符串不是空字符串,絕對不是一個錯誤? – DevDevDev 2009-08-17 02:41:07

+0

是的,沒錯。 – 2009-08-17 03:43:14

0

那你覺得呢? LPstr是一個指向ANSI字符的以空字符結尾的數組的指針。 NULL顯然不是指向空終止數組的指針。它可能會嘗試從NULL或其他東西讀取。 在任何情況下,它的未定義的行爲,它會導致您的應用程序崩潰或使其處於未知狀態。你爲什麼要這樣?爲什麼不在檢查之前檢查呢?

+0

如何檢查屬性?那麼我需要編組一個IntPtr。 – DevDevDev 2009-08-17 02:37:32

0

我想它會將NULL傳遞給底層API,這可能是也可能不是可接受的輸入,具體取決於您所調用的內容。大多數體面設計的C(++)代碼檢查這種事情,但最好仔細檢查一下。

1

當類型爲在任一方向編組(NULL C和空爲C#)當一個字符串將被轉換爲NULL的相應語言表示

相關問題