2

BITSのラッパーとして社内で開発したライブラリを譲り受けました。64 ビット ビルドと 32 ビット ビルドの間で変更したい場合は、これらの 2 つのコメント行を入れ替える必要があると言われました。

[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 をすべて互換性のあるものにする方法)

データ型の MSDN へのリンク

4

1 に答える 1

4

x64/x86 のトリックを行う必要はありません。構造体の pinvoke を次に示します。

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct BG_BASIC_CREDENTIALS
{
  public string UserName;
  public string Pssword;
}
于 2010-10-04T17:44:58.630 に答える