環境: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);
弁さん来ないなぁ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
ツイート | ![]() |