VB.NETで宣言した変数・構造体をVC++で自作したDLL内で共有するには


6de74  2004-01-07 03:53:05  No: 81294  IP: [192.*.*.*]

VB.NETで宣言した変数・構造体をVC++で自作したDLLから触りたく、DLLにて変数・構造体のアドレスを取得した後、値の変更を行いました。
VB.NETで確認したところ、整数型は値が変更されているのですが、構造体と文字列は値が変更されず困っています。

コーディングを下記のように行ったのですが、
どうやったら構造体・文字列を共有することができるのでしょうか?
どなたか教えて下さい。  よろしくお願い致します。

***  VC++のソース  ***

//構造体・変数宣言
struct param{
    long              num;
    unsigned char    LEVAR[10];
    char             CDUSR[5];
};

struct param    *mpara;
long            *mlong
char            *mchar

//変数・構造体のアドレス取得
SUB_API void __stdcall setaddr(long *plong, 
                               struct param *ppara, 
                               char *pchar)
{
        mlong = plong;
        mpara = ppara;
        mchar = pchar;
}

// setaddr関数にて取得したアドレスを使用して値変更
SUB_API void __stdcall setdata()
{
        *mlong = 200;
        mpara->num = 200;
        mpara->LEVAR[0] = 200;
        strcpy((char*)mpara->CDUSR, "BBB");
        strcpy((char*)mchar, "BBB");
}

***  VB.NETのソース  ***

'構造体・変数宣言
<StructLayout(LayoutKind.Sequential, _
              CharSet:=CharSet.Ansi)> structure param
    Public NUM As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _
    Public LEVER() As Byte
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=5)> _
    Public CDUSR As String

    Public Sub InitStruct()
        ReDim LEVER(9)

        NUM = 100
        LEVER(0) = "100"
        CDUSR = "AAA"
    End Sub
End Structure

Public mpara As param
Public mint As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
Public mstr As String

'DLL宣言
Private Declare Sub setaddr Lib "sub.dll" (ByRef mint As Integer, _
                                           ByRef mpara As param, _
                                           ByRef mstr As String)
Private Declare Sub setdata Lib "sub.dll" ()

'実行処理部
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) _
                          Handles Button1.Click
    mpara.InitStruct()
    mint = 100
    mstr = "AAA"

    setaddr(mint, mpara, mstr)
    setdata()
End Sub

編集    削除