- PR -

VC#にてDLL内の構造体を取得する方法

投稿者投稿内容
Vandoross
会議室デビュー日: 2006/02/22
投稿数: 7
投稿日時: 2006-03-23 23:37
引用:
C/C++ での long は通常 32bit です。
C# での long は System.Int64 のエイリアス、つまり 64bit です。
構造体のサイズが全く違ってますよ……。


本当ですね。。。大変失礼しました。

コード:
[StructLayout(LayoutKind.Sequential)]
public class StructB {
    public StructA A01;
    (略)
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=4096)]
    public int[] B;
    (以下略)
}
[DllImport("Hoge.dll")]
public static extern void Hoge([In, Out] StructB b);


この方法で、無事にDLL側にポインタを渡すことができました。謝謝。

引用:
なお、いずれにせよ渡したポインタを DLL 側が保持しておくようなコードはさけるべきですよ?


移動可能変数のため、アドレスが保証されないんですね。
共有メモリを使うか、ポインタを使用しないような作りにするか、検討したいと思います。

Hongliangさん、長々とお付き合いしていただき、本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)