VB2005からVCで作られたDLLをコールするときにエラーが出て困ってます。
関数のパラメータに構造体を指定して、構造体のメンバの文字列を渡したいけれど、なんかうまく行かないんですよね。
VB2005だと固定長文字列ってのがサポートされていないとか何とか言うのは分かったけれど、
解決方法が不明となっています。
アドバイスをお願いします。
コードはこんな感じ。
*VC2005*******************************************************
typedef struct{
int iTemp;
char cTemp[256];
}tag_strTemp;
void __declspec(dllexport) WINAPI TestFunction(tag_strTemp* pstrTemp)
{
MessageBox(NULL, pstrTemp->cTemp, "", 0);
}
*VC2005*******************************************************
*VB2005*******************************************************
Moduel Module1
Public Structure tag_strTemp
Public iTemp as Integer
Public cTemp as String ←ここの定義に問題があるんだと思ってます。
End Structure
End Module
Public Class Form1
Private Sub Form1_Load(・・・)
Dim strTemp as tag_strTemp
strTemp.cTemp = "ABCDE"
TestFunction(strTemp)
End Sub
End Class
*VB2005*******************************************************
No.1ベストアンサー
- 回答日時:
VCで作成した アンマネージドDLLを呼び出す場合にはマーシャリングを行いましょう
構造体の定義を
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public Structure tag_strTemp
Public iTemp As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
Public cTemp As String
End Structure
といった具合にします
# StructLayoutの CharSet引数は環境に合わせて変更してください
MSDNの『文字列のマーシャリング』の『構造体に組み込んで参照渡し (char[])。』を参照してみましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
構造体のデータを丸ごとコピー...
-
VBAにてcolorindexを変数に格納...
-
プログラミング言語の変数と数...
-
値が変わるのはどうしてでしょ...
-
値が代入されてない時
-
VB6.0の変数、関数の定義位置か...
-
VBAの変数のデータ型を変更する...
-
long型のデータをバイト型の配...
-
C言語 構造体の中に共用体を定...
-
整数から16進数への変換 現在c...
-
ヘッダファイルと構造体
-
構造体の代入と比較
-
winsockのsendtoで送れるデータ型
-
C++ 構造体の一括初期化 {0}
-
構造体のポインタにNULLが入らない
-
セグメントエラー
-
関数から配列を返すには?
-
ExcelVBAで質問です。離れた二...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
long型のデータをバイト型の配...
-
「#undef」と「#define」の使い...
-
構造体のデータを丸ごとコピー...
-
VBAにてcolorindexを変数に格納...
-
C言語 構造体の中に共用体を定...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
typedefをプログラム中で解除す...
-
構造体のポインタにNULLが入らない
-
charとucharの違い
-
整数から16進数への変換 現在c...
-
VBAの変数のデータ型を変更する...
-
VB.NETのStructureというのはど...
-
構造体を型の異なる構造体に代入
-
日付チェック関数について
-
ユーザー定義型変数の一括初期化
-
構造体の初期化方法について
おすすめ情報