VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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から値が返った後、変数の値を確認しても値が何も設定されない状態です。

配列にせずにした場合は値を取得することが可能です。
宜しくお願いします。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -