tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: DLLへの文字列ポインタについて
投稿日: 2008/05/17(Sat) 17:30
投稿者neptune
こんにちは

忘れているので思い出しがてら実験してみました。

' ///////////////VB側 標準モジュール////////////////
Public Type STRCT
    ldat_A As Long       ' データA
    lptr As String         ' ファイル名
End Type

Public Declare Function structTest Lib "DllSample.dll" _
        (ByVal handle As _
        Long, ByRef ptyp As STRCT) As Long

Public Sub StructTest1()
    Dim typBuf As STRCT
    Dim sFileName As String
    Dim ret As Long

    sFileName = "FileName"
    With typBuf
        .ldat_A = 10
        .lptr = sFileName
    End With
    ret = structTest(Form1.hWnd, typBuf)
    Debug.Print ret
End Sub


/*C側----------必要部分のみ抜粋--------- */
typedef struct {
    int         ldat;       // データ
    char        *lptr;      // ファイル名
} STRCT;

extern "C" __declspec(dllexport) int __stdcall structTest(HWND ,STRCT *);

EXPORT int __stdcall structTest(HWND hWnd,STRCT *lpstrct){
    int length;
    char *sbuf;
    char slen[10];

    length = strlen(lpstrct->lptr);  
    sbuf = lpstrct->lptr;
    itoa(length,slen,10);

    strcat(sbuf,"\n文字数は : ");
    strcat(sbuf,slen);
    MessageBox(hWnd,sbuf,"structText",MB_OK);
    return length;
}

以上の検証コードで文字列、文字数は正常に取得できました。

重要:とりあえず動きましたが、正直絶対これでOKと言うほどスキルがありません
  のでお断りしておきます。

たまに書かないと忘れますね。いい機会になりました。^ ^;;

> Q1.VBでは
>     それとも
>         Type STRCT
>                 ldat_A As Long       ' データA
>                 lptr As String       ' ファイル名
>                 ldat_B As Long       ' データB
>         End Type
>         の様に定義するのでしょうか?
↑ですね。

> Q2.
回答なし。

> Q3−1.
> Q3−2.
> Q3−3.
サンプルコード参照願います。

以下のMSDN(VS6用)参照願います。
[VB5] Visual Basic 5.0 から呼び出し可能な DLL の作成例
Microsoft Visual Basic Version 5.0 で使用する DLL の開発に関する注意

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

古いスレッドにレスはつけられません。