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

投稿日: 2006/04/17(Mon) 09:32
投稿者morimori
Eメール
URL
タイトルRe: VC++で作成したDLLにユーザ定義型の配列を指定したい

Blue様、K.J.K様
返答をもらっておきながら返事が遅れてしまい、大変申し訳ございません。

> まず、仕様を整理する必要があるでしょう。
> 1,DLL側からVBに渡す構造体は、固定長の配列として渡されるのか?
>   それとも、そのときに応じて長さが変わる可変長の配列なのか?
> 2,DLL側からVBに渡す構造体の内部の文字列について、固定長なのか
>   可変長なのか?
DLL側では「char cReceiveData[100]」としているので、固定長の配列となります。

> > 結局DLLは何をするんでしょうか?WinSockって?
> > g_cReceiveDataはなに(文字列ですよね)?
> の説明があれば、SafeArrayのやつを考えようと思ったのですが、ないのでやりません。
「g_cReceiveData」は文字列を格納します。
今回、作成したDLLはソケット通信用のDLLでDLL側でソケット通信で受信した文字列を
VBに返すというプログラムを作成しております。
説明が遅れてしまい、申し訳ございません。

最終的には、K.J.K様のやり方でVBからは配列の先頭の要素を渡してやることで
成功することができました。
ご教授いただいて感謝しております。
今後とも、宜しくお願い致します。

以下にプログラムリストを載せておきます。

[VB側]
Private Type ReceiveInfo
    cReceiveData(0& To 99&) As Byte
End Type

Private Declare Function dllReceive Lib "dllWinSock.dll" (ByRef tReceiveData As ReceiveInfo) As Long

Private Sub Command3_Click()
    Dim tReceiveData(0 To 19&) As ReceiveInfo
    
    dllReadFindUid Text1.Text, tReceiveData(0&)

    '以下、省略
    
End Sub


[VC側]
extern "C" int WINAPI EXPORT dllReceive(ReceiveInfo *tReceiveInfo)
{
    long i;

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    for(i=0;i<g_iReceiveCnt;i++){
        strcpy(tReceiveInfo[i].cReceiveData, g_cReceiveData[i]);
        strcpy(g_cReceiveData[i], "");
    }
    g_iReceiveCnt = 0;

    return 0;
}


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

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

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