タイトル : 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 の開発に関する注意 |