投稿日 | : 2006/04/14(Fri) 11:24 |
投稿者 | : morimori |
Eメール | : |
URL | : |
タイトル | : VC++で作成したDLLにユーザ定義型の配列を指定したい |
はじめまして、morimoriと申します。
現在、VC++で作成したDLLがあり、このDLLをVBから使用したいと思っているのですが、
そこでDLLの引数にユーザ定義型の配列を指定し、DLLで複数のデータを設定してVBに返すというプロ
グラムを作成したいのですが、ユーザ定義型を配列型にするとデータを取得することができません。
以下にソースを提示しますので、ご教授の程、宜しくお願いします。
[VB側]
Private Type ReceiveInfo
lNumber As Long
cReceiveData As String * 100
End Type
Private Declare Function dllReceive Lib "dllWinSock.dll" (ByRef tReceiveData() As
ReceiveInfo) As Long
Private Sub Command3_Click()
Dim i As Integer
Dim tReceiveData(20) 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
[VC側]
typedef struct{
int iNumber;
char cReceiveData[100];
} ReceiveInfo;
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;
}
実際のプログラムとは一部、異なりますが上記のことを
実現したいと思っております。
現状では、DLLから値が返った後、変数の値を確認しても値が何も設定されない状態です。
配列にせずにした場合は値を取得することが可能です。
宜しくお願いします。