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