C# P/Invoke声明似乎不正确
我被传下了一个图书馆,这个图书馆是在家里开发的,作为比特的包装。我被告知,如果您想在64位和32位构建之间进行更改,则需要交换这两行注释C# P/Invoke声明似乎不正确,c#,pinvoke,microsoft-bits,bits-service,C#,Pinvoke,Microsoft Bits,Bits Service,我被传下了一个图书馆,这个图书馆是在家里开发的,作为比特的包装。我被告知,如果您想在64位和32位构建之间进行更改,则需要交换这两行注释 [StructLayout(LayoutKind.Explicit, Size = 8, Pack = 4)] //32 bit address internal struct BG_BASIC_CREDENTIALS { [FieldOffset(0)] [MarshalAs(UnmanagedType.LPWStr)] publi
[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完全兼容的方法)
您不需要做任何x64/x86技巧,下面是结构的pinvoke
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct BG_BASIC_CREDENTIALS
{
public string UserName;
public string Pssword;
}
是的,那就行了。即使是非标准的包装也是不必要的。我还将此添加到了