gpt4 book ai didi

c# - P/Invoke 声明似乎不正确

转载 作者:行者123 更新时间:2023-11-30 21:19:18 25 4
gpt4 key购买 nike

我得到了一个内部开发的库作为 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 objective-c pu 全部兼容的方法)

Link to the MSDN of the datatype

最佳答案

你不需要做任何 x64/x86 技巧,这里是结构的 pinvoke

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

关于c# - P/Invoke 声明似乎不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com