2010-10-04 68 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