我想打電話給LsaOpenPolicy
,它需要一個LSA_OBJECT_ATTRIBUTES
結構。我正在使用the struct definition from pinvoke.net。該結構具有字段public LSA_UNICODE_STRING ObjectName;
。如何爲一個pinvoke調用分配一個空值給一個結構體?
的LSA_OBJECT_ATTRIBUTES
MSDN文章說:
當你調用
LsaOpenPolicy
,這種結構的成員初始化爲NULL 或爲零,因爲該功能不使用這些信息。
而具體:
對象名
應該NULL。
雖然我可以分配LSA_OBJECT_ATTRIBUTES
結構的其他領域IntPtr.Zero
(或只是簡單的0
的值類型),我看不到的方式來爲ObjectName
這樣做。具體來說,
無法隱式轉換類型 'System.IntPtr' 到 'LSA_UNICODE_STRING'
我應該在這種情況下怎麼辦?我是否應該初始化一個長度爲零(長度爲0,最大長度爲0,空/空緩衝區)的LSA_UNICODE_STRING
?我是否應該更改LSA_OBJECT_ATTRIBUTES
定義,以便字段爲IntPtr
?我應該將它設爲空,並將null
分配給該字段?
我對內存管理的經驗很少,所以我對任何可能導致內存泄漏的問題都非常謹慎。
它可能不是最漂亮的溶劑,但是在你通過參數之前投射到一個物體上會發生什麼? – Jordy
@Jordy(LSA_UNICODE_STRING)(object)IntPtr.Zero'編譯,但在運行時拋出'InvalidCastException'。就我所能說的,我在問題結尾處提出的兩種方法都有效,但我不知道我是否會遇到任何問題。 – Bob
Pinvoke是一件棘手的事情......如果它像你期望的那樣工作,那麼你可能會算上自己的幸運。基本經驗與Pinvoke:如果它的工作,不要觸摸它。 – Jordy