
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# ...
-
C++ メンバイニシャライザリス...
-
プログラミング言語の変数と数...
-
コンストラクタ内での動的メモ...
-
C言語 構造体の中に共用体を定...
-
VBからVCへ渡す構造体の設定に...
-
Integer変数をカラにしたいので...
-
VBAの変数のデータ型を変更する...
-
1バイトデータの読み出しについて
-
Schemeのコンストラクタの引数は?
-
マイコンのプログラム(C言語...
-
VBAにてcolorindexを変数に格納...
-
構造体のデータを丸ごとコピー...
-
BOOL へのUINT の代入
-
typedefをプログラム中で解除す...
-
C言語 配列の長さの上限
-
高校1年です。情報技術基礎のシ...
-
init関数の意味
-
配列の要素数に変数を入れたい...
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
VBAのプログラムで、DIAG = 1# ...
-
「#undef」と「#define」の使い...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
long型のデータをバイト型の配...
-
VBAにてcolorindexを変数に格納...
-
C言語 構造体の中に共用体を定...
-
VBAの変数のデータ型を変更する...
-
VBAで符号無し整数
-
typedefをプログラム中で解除す...
-
構造体のポインタにNULLが入らない
-
変数の初期化について
-
値が代入されてない時
-
charとucharの違い
-
構造体の初期化方法について
-
整数から16進数への変換 現在c...
-
命名規則 VB 構造体
-
日付チェック関数について
-
1バイトデータの読み出しについて
おすすめ情報