DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VC++6.0で作成したDLLから文字列の取得方法は?

環境/言語:[WindowsXP VB.NET]
分類:[.NET]

タイトルにある通り、VC++6.0で作成したDLLからVB.NETで文字列を取得したいのですが、固定長の宣言方法がよく分かりません。

ちなみにMSDN等を参考にしたコードは以下の通りです。


Private Declare Sub GetString Lib "VC60DLL" (ByRef strA As String)
<VBFixedStringAttribute(20)> Private AA As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Call GetString (AA)

End Sub

ご存知の方いらっしゃいましたら、アドバイスよろしくお願い致します。
引数としてLPTSTRなど文字列を格納するバッファを要求する関数の場合、引数の型をstringの代わりにStringBuilderクラスのByValで代用することができます(StringBuilder.Capacityプロパティで容量を指定することができます)。一般的にはこちらが使われることが多いようです。

またC++と同じようなトリックを利用した別の方法として、次のような固定長Stringフィールドだけを持つ構造体を渡す方法もあります。

<System.Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential, CharSet:=Runtime.InteropServices.CharSet.Ansi)> _
Public Structure Data
<System.Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=20)> Public AA As String
End Structure
Codingslaveさん、アドバイスありがとうございます。
Codingslaveさんの方法で試してみたのですが、上手くいきませんでした。
しかし、調べた結果、以下の方法で文字列を取得することが出来ました。


Private Declare Sub GetString Lib "VC60DLL" (ByVal strAA As System.Text.StringBuilder) 'VC++で作成のDLL

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim strAA As New System.Text.StringBuilder '文字列取得領域

Call GetString (strAA) 'DLLから文字列を取得
MsgBox(strAA.ToString)

End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板