投稿日 | : 2006/04/14(Fri) 18:04 |
投稿者 | : morimori |
Eメール | : |
URL | : |
タイトル | : Re^5: VC++で作成したDLLにユーザ定義型の配列を指定したい |
k.J.K様の説明をしっかり理解していませんでした。
申し訳ありません。
ソースとしては、DLL側の方を修正しなくてもよいのであれば極力修正はしない形で進めればと思ってお
ります。
VBから引数に設定する際、構造体の配列を渡したいので、
以下のソースに変更しました。
Private Type ReceiveInfo
lNumber As Long
cReceiveData As Byte(0 To 99)
End Type
Private Declare Function dllReceive Lib "Test.dll" _
(ByRef tReceiveData() As ReceiveInfo) As Long
Private Sub Command3_Click()
Dim i As Integer
Dim tReceiveData(0 To 19) As ReceiveInfo
dllReceive tReceiveData()
Text2.Text = ""
For i = 0 To UBound(tReceiveData)
If tReceiveData(i).cReceiveData <> "" Then
Text2.Text = Text2.Text & tReceiveData(i).cReceiveData & ", "
End If
Next i
End Sub
extern "C" int WINAPI EXPORT dllReceive(ReceiveInfo **tReceiveInfo)
{
int i;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
for(i=0;i<g_iReceiveCnt;i++){
tReceiveInfo[i].iNumber = i;
strcpy(tReceiveInfo[i].cReceiveData, g_cReceiveData[i]);
strcpy(g_cReceiveData[i], "");
}
g_iReceiveCnt = 0;
return 0;
}
上記のソースで実行すると、VB側で関数を実行した後、「オーバーフローしました」
のメッセージが表示されます。