掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.NETからDLLの呼び出しについて (ID:83428)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB.NETからDLLへ構造体を渡すところで質問させて下さい。 現在、2つの構造体のテーブルをVC++.NETで作成した関数へ渡し、関数内から値を 取得しようとしています。 ところが「TestInfor2」の方は正しい値が取得できるのですが、「TestInfor1」は はじめのテーブルしか値が入らず、それ以降は値が入りません。 しかもその後、エリアを壊しているようで、例外エラーとなってしまいます。 DLL側で渡された「TestInfor1」の内容を確認すると配列分のアドレスが上手く渡せて いないように見えました。 試しに「TestInfor1」を渡さないようにしてみると例外エラーも出ず、処理出来ました。 色々と調べてはみたのですが解決方法が見つからず、実際、VB.NETを始めたばかりなの で何が悪いかも検討がつかない状況です。 些細な事でも構いませんので、どうかお力を貸していただけないでしょうか。 長文で申し訳ありませんが、よろしくお願いします。 --- VB --- ''## 構造体定義 ## <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _ Public Structure TestInfor1 <VBFixedArray(63), MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _ Dim data1() As Byte <VBFixedArray(79), MarshalAs(UnmanagedType.ByValArray, SizeConst:=80)> _ Dim data2() As Byte <VBFixedArray(4), MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> _ Dim data3() As Integer Public Sub Initialize() ReDim data1(63) ReDim data2(79) ReDim data3(4) End Sub End Structure <StructLayout(LayoutKind.Sequential)> _ Public Structure TestInfor2 Dim data1 As Integer Dim data2 As Integer End Structure Public Infor1(50) As TestInfor1 Public Infor2(50) As TestInfor2 ''## DLL呼び出し ## TestInfoGet( para1, Infor1(0), Infor2(0) ) ''## DLL定義 ## Public Declare Function TestInfoGet Lib "TestInfo.dll" _ (ByRef para1 As Integer <MarshalAs(UnmanagedType.Struct)> ByRef TInfor1 As TestInfor1, _ <MarshalAs(UnmanagedType.Struct)> ByRef TInfor2 As TestInfor2) As Integer --- VC --- ''## 構造体定義 ## typedef struct Infor1 { char Name[64]; char BanRyaku[10][8]; int BanCode[4]; } TestInfor1 ; typedef struct Infor2 { int data1; int data2; } TestInfor2 ; #define DLL_EXPORT __declspec(dllexport) DLL_EXPORT int TestInfoGet( int *para1, TestInfor1 *dp1, TestInfor2 *dp2 ) { for( i = 0; i < 49; i++ ) { memcpy ( dp1, &TestData1[i], sizeof(TestInfor1) ); dp1++; } for( i = 0; i < 49; i++ ) { dp2->data1 = TestData2.data1 ; dp2->data2 = TestData2.data2 ; dp2++; } }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.