- - PR -
VC++で作ったDLLをVB.NETから呼び出したい(二次元配列)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-04-09 12:41
OS:Windows XP SP2
開発ツール:Visual Studio 2005(C++,VB使用) VB2005のC++で作成したDLLを、 VB.NETから呼び出したいのですが、 戻り値(正確には引数)が二次元配列になっており VB.NET側で正しく受け取ることができず悩んでおります。 【VC++側のソース】 Export int __stdcall Read_EmpCode(char **pCodeList) { 〜省略〜 return 0; } デバッグ時、クイックウォッチで、 pCodeListの中を見ると、 正しくコードが格納されていることは確認済です。 pCodeList[0] = "111111" pCodeList[1] = "222222" 【VB側のソース(呼び出し側)】 Declare Function ReadEmpCode Lib "READ_CODE" Alias "_ReadEmpCode@4" _ (ByVal s As System.Text.StringBuilder) As Integer Private Sub Button1_Click() Dim strCode As New System.Text.StringBuilder Dim intRet As Integer 'DLL関数の呼び出し intRet = ReadEmpCode(strCode) End Sub デバッグ時、クイックウォッチで、 strCodeの中身を見ると、文字化けした文字(記号)が 格納されています。 C++の引数が二次元配列で、その二次元配列の中身を VB.NET側から受け取るにはどのように記述すればよいか ご存知の方がおられましたら、教えてください。 よろしくお願い致します。 |
|
投稿日時: 2008-04-09 12:45
すいません。。。訂正と追記です。
VC側のソース(関数の宣言部)は Export int __stdcall Read_EmpCode(char **pCodeList) { ではなく、 Export int __stdcall ReadEmpCode(char **pCodeList) { の誤りです。 また、VB側のDeclare Functionの宣言で、 Declare Auto Function Declare Ansi Function Declare Unicode Function と3パターンとも試してみましたが、どれも結果は同じで、 strCodeの中身を見ると、文字化けした文字(記号)が 格納されていました。 |
|
投稿日時: 2008-04-09 14:03
これは一般に文字列の配列って言うと思いますが。
メモリ解放のことも考えれば、ByVal pCodeList As IntPtr() で受け取って それぞれ Marshal.PtrToStringAnsi するのがいいんではないでしょうか。 |
1