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

投稿日: 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側で関数を実行した後、「オーバーフローしました」
のメッセージが表示されます。


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

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

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