C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VB.NETからVisual C++にchar*型を渡す方法


(過去ログ 7 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■7395 / inTopicNo.1)  VB.NETからVisual C++にchar*型を渡す方法
  
□投稿者/ ゆうじ 軍曹(62回)-(2006/10/10(Tue) 17:02:42)

分類:[.NET 全般] 


分類:[.NET 全般] 

いつもお世話になっております。ゆうじです。

VB.NETからVisual C++にchar*型を渡す方法で悩んでいます。
よろしくお願いいたします。

開発環境:VS2005 Professional
OS:WinXP SP2

【ソースの構成】
ソリューションに下記のプロジェクトを追加しています。
※以下は作成した手順です。
@VB.NET→Windows→Windowsアプリケーション
AVisual C++→CLR→クラス ライブラリ

@→Aで参照設定して、以下のようなソースを書いております。

@のコード
Public Class クラスB
Private Sub ボタンB_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles ボタンB.Click

Dim sb As New System.Text.StringBuilder(256)
sb.Append("123")
クラスC.Set_ID(sb)

End Sub
End Class

Aのコード
namespace プロジェクトC
{
public:
char *m_strID;

public ref class クラスC
{
void クラスC::Set_ID(
char* strID
)
{
(char*)m_strID = (char*)strID;
}
}
}
}

【エラー内容】
以下のエラーが発生します。
「エラー 'Set_ID' には、サポートされていない戻り値の型か、
またはサポートされていないパラメータ型が指定されています。」

このエラーを解決するには
・サポートされている型として戻り値の型またはパラメータを定義します。
・プロシージャによって使用されるデータを記述する新しい型を作成します。
らしいですが、力不足でよい案が浮かびません。

VB.NETからVisual C++にchar*型を渡す方法について、
ご教示のほどよろしくお願いいたします。



0
引用返信 編集キー/
■7398 / inTopicNo.2)  Re[1]: VB.NETからVisual C++にchar*型を渡す方法
□投稿者/ Blue 准尉(101回)-(2006/10/10(Tue) 17:07:58)

分類:[.NET 全般] 

2006/10/10(Tue) 17:08:33 編集(投稿者)

C++/CLI側で char* で扱うのには意味があるのでしょうか?
System::String^(もしくはSystem::Text::StringBuilder^) ではダメなんでしょうか?
(出来るだけVB,C#ではアンマネージドを意識させたくない気がしますが。)

> (char*)m_strID = (char*)strID;
意味不明です。

0
引用返信 編集キー/
■7403 / inTopicNo.3)  Re[2]: VB.NETからVisual C++にchar*型を渡す方法
□投稿者/ ゆうじ 軍曹(63回)-(2006/10/10(Tue) 17:24:57)

分類:[.NET 全般] 

Blueさん返事ありがとうございます。

> C++/CLI側で char* で扱うのには意味があるのでしょうか?
> System::String^(もしくはSystem::Text::StringBuilder^) ではダメなんでしょうか?
現在VC++6.0のソースを移行しております。
char* で扱うのはメソッド内でstrcpy、sprintfを使用しているためだけです。
System::String等で受け取って、メソッド内でchar*に変換したりできるのでしょうか?
C++/CLIが理解できておらず、System::Stringなどの発想がありませんでした。
ありがとうございました。


>>(char*)m_strID = (char*)strID;
> 意味不明です。
改修中のソースを貼り付けました。失礼しました。


0
引用返信 編集キー/
■7405 / inTopicNo.4)  Re[3]: VB.NETからVisual C++にchar*型を渡す方法
□投稿者/ Blue 准尉(103回)-(2006/10/10(Tue) 18:03:43)

分類:[.NET 全般] 

どうせならば、C++/CLI側で文字列を作って返すようなつくりにしたほうがよさそう。
で、strcpyやsprintfを使うところだけ局所的にchar型配列を使うとか。

System::String^ s = "1234";

// sを使って文字列を作る。
char buff[ 256 ];
IntPtr p = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s)

sprintf( buff, "%IDは %s です。", static_cast< const char* >( p.ToPointer() ) );
System::String msg( buff );
MessageBox::Show( buff );

System::Runtime::InteropServices::Marshal::FreeHGlobal(p);


※VBは基本的にUnicode(UTF16?)ですので、strcpyやsprintfではなく、wchar_t型用の
wcscpyやswprintfを使ったほうがやりやすいです。
(Marshal〜を使わないで、PtrToStringCharsでconst wchar*型が取得できる)
参考
http://support.microsoft.com/kb/311259/ja


0
引用返信 編集キー/
■7409 / inTopicNo.5)  Re[4]: VB.NETからVisual C++にchar*型を渡す方法
□投稿者/ ゆうじ 軍曹(64回)-(2006/10/10(Tue) 20:03:06)

分類:[.NET 全般] 

Blueさん返事ありがとうございます。

ご提案いただきましたstrcpyやsprintfを使うところだけ
局所的にchar型配列を使う方法で解決いたしました。
大変勉強になりました。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -