VB.NETからDLLへ引数として構造体を渡す時について


高橋  2005-09-27 19:43:11  No: 125746

環境:WindowsXP
言語:VB.net2003 + VC6

いつも参考にさせて頂いてます。
VB.NETからDLLへ引数として構造体を渡すところで質問させて下さい。
TESTInfoの構造体のstrDirNameに日本語文字を含むファイルパスを入力し、DLLの引数にセットしたところで

"埋め込み文字列を Unicode から ANSI に変換できなかったため、型を集成できませんでした。"
という、例外エラーが発生します。

日本語を含まないのであれば、問題ないのです。
このような場合、どのようにすれば解決できるかご指導のほどお願い致します。

'#### VB側 ####

' 構造体定義
Public Structure TESTInfo
  <MarshalAs(UnmanagedType.ByValArray, ArraySubType:=UnmanagedType.ByValTStr, SizeConst:=256), VBFixedArray(255)> _
  Public strDirName() As Char 'ディレクトリ名
End Structure

' DLL定義
Public Declare Function SendData Lib "TEST.dll" _
(ByVal stTESTInfo As TESTInfo) As Integer

’DLL呼び出し
stTESTInfo.strDirName = CStr("C:\Temp\ファイル格納フォルダ\").PadRight(256, "")
SendData(stTESTInfo)   '←ここで例外が発生

//#### VC側 ####

//構造体定義
typedef struct
{
  char ac_dir_name[256]; /* ディレクトリ名 */
} ArgTESTInfo;

//関数定義
int SendData(ArgTESTInfo);


特攻隊長まるるう  2005-09-28 04:46:23  No: 125747

弁さん来ないなぁw
…オイラだとこの辺は弱いからリンクだけにしとくか…(汗)
[Unicode対応プログラミング]
http://www.ruche-home.net/program/tips/tchar.php
[VB.netにて、構造体の中身をString変数にコピーするには?]
http://madia.world.coocan.jp/vb/vb_bbs/200405_04050011.html
>CharSet.Ansi
のあたりとかそのままな気もしますが。エンコード必要?
[Encoding クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemtextencodingmemberstopic.asp


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加