2010-10-04 80 views
2

我被傳下來了一個庫,作爲BITS的包裝開發。有人告訴我,如果你想改變64位和32位版本,你需要換掉這兩條註釋行。P/Invoke聲明看起來不正確

[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 4)] //32 bit address 
internal struct BG_BASIC_CREDENTIALS 
{ 
    [FieldOffset(0)] 
    [MarshalAs(UnmanagedType.LPWStr)] 
    public string UserName; 

    [FieldOffset(4)] 
    [MarshalAs(UnmanagedType.LPWStr)] 
    public string Password; 
} 


//[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 8)] //64 bit address 
//internal struct BG_BASIC_CREDENTIALS 
//{ 
// [FieldOffset(0)] 
// [MarshalAs(UnmanagedType.LPWStr)] 
// public string UserName; 

// [FieldOffset(8)] 
// [MarshalAs(UnmanagedType.LPWStr)] 
// public string Password; 
//} 

這只是不跟我正確的坐,是誰我得到這個從做正確的事情(這個代碼使用的是交換意見伎倆部署在32位和64的機器,所以我知道它的工作原理)的人。如果這是需要做的事情,有什麼辦法可以做到這一點,所以每次創建32或64位版本時都不需要手動調整評論。 (還是有辦法讓這個dll目標CPU全兼容)

Link to the MSDN of the datatype

+0

我還添加了這對[pinvoke.net](http://pinvoke.net/default.aspx/Structures/BG_BASIC_CREDENTIALS.html |) – 2010-10-05 08:16:51

回答

4

你不需要任何待辦事項的x64/x86的技巧,這裏是結構的PInvoke的

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] 
struct BG_BASIC_CREDENTIALS 
{ 
    public string UserName; 
    public string Pssword; 
} 
+0

是的,這將做到這一點。即使是非標準包也是不必要的。 – 2010-10-04 17:54:02