- - PR -
VC++の関数からVB.NETで文字列を受け取る方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-01-06 17:52
ぷーちんです。いつもお世話になっております。
VC++で文字列を取得する関数があるDLLを作成し、 この関数を VB.NET から呼び出そうとしています。 文字列を VC++の関数に渡す場合は以下の方法で可能ですが、 例)VC++の関数 CharPut(const char* cData) 文字列を渡す CharPut(System.Text.Encoding.Default.GetBytes("abcdefg")) 取得する事がどうしてもできません。 以下にサンプルのソースを載せました。 Byte配列では取得できないのでしょうか? よろしくお願い致します。 VC++ --------------------------------------------------------------------- // 文字列取得関数 void WINAPI CharGet(char* chrpData) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); strcpy(chrpData, "ABCDEFG"); } VB.NET ---------------------------------------------------------------------- 'APIの宣言 Private Declare Auto Sub CharGet Lib "CharTest002.dll" _ Alias "CharGet" (ByRef bytData As Byte()) 'このメソッドで取得する Private Sub GetChar() Dim bytWork(32) As Byte 'ここで呼び出す CharGet(bytWork) System.Diagnostics.Debug.WriteLine("Char:" + System.Text.Encoding.Default.GetString(bytWork)) End Sub |
|
投稿日時: 2003-01-07 00:11
ヘルプの「プラットフォーム呼び出しのデータ型」ページを参照してもらえばわかると思いますが、アンマネージC言語の型がchar*の場合、.NETではSystem.StringまたはSystem.Text.StringBuilderクラスで引数の受け渡しをすることになるはずです。
#ヘルプではStringBuilderがSystemネームスペースにあると誤記載されています。 |
|
投稿日時: 2003-01-07 14:06
ぷーちんです。
二天さん、いつもありがとうございます。 御回答の通り、StringBuilderクラスで受け渡しができました。 パラメータを渡すだけの場合も、Byte配列ではなくStringでできました。 VB.NETのソースを以下のように修正しました。 ※宣言の ByRef のところも ByVal に直しました。 VB.NET ---------------------------------------------------------------------- 'APIの宣言 Private Declare Auto Sub CharGet Lib "CharTest002.dll" _ Alias "CharGet" (ByVal strbData As StringBuilder) 'このメソッドで取得する Private Sub GetChar() Dim strbWork As New StringBuilder(128) 'ここで呼び出す CharGet(strbWork) System.Diagnostics.Debug.WriteLine("Char:" + strbWork.ToString) End Sub どうもありがとうございました。 今後ともよろしくお願い致します。 |
1