我传下了一个在内部开发的库,作为BITS的包装。有人告诉我,如果你想在64位和32位版本之间进行更改,你需要换掉这两个注释行。
[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全部兼容的方法)
答案 0 :(得分:4)
你不需要任何x64 / x86技巧,这里是结构的pinvoke
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct BG_BASIC_CREDENTIALS
{
public string UserName;
public string Pssword;
}