アプリ版:「スタンプのみでお礼する」機能のリリースについて

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*******************************************************

A 回答 (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[])。』を参照してみましょう
    • good
    • 0
この回答へのお礼

返答が遅れてしまって申し訳ないです。
大変参考になりました。
ありがとうございます。

お礼日時:2007/06/30 17:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!