ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C言語とC++言語コミュのString型からchar*型

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問させていただきます。
現在、下記のようなコード(下記はサンプルコード)を作成し、
C++.NETのString型からC言語のchar*型に引数として渡す、
というプログラムを作成しています。
しかし、コンパイルは通るのですが、
「'System.FormatException'のハンドルされていない例外が
mscorlib.dllで発生しました。
追加情報:Stringには一文字しかしようできません。」
というエラーがデバック時に発生してしまい、これをとることが
できません。
どのような処理を行えばエラーがなくなるのでしょうか?
また、そのC++.NETのString型からC言語のchar*型に引数として渡す手段が
あるのでしょうか?
ぜひご教示ください。
よろしくお願いいたします。
#include "stdafx.h"
using namespace System;
void func(char *c);
int main()
{
String ^str = "asc";
func((char *)Convert::ToChar(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}

コメント(11)

こうすれば出来ます。

IntPtr mptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str);
char* c = static_cast<char*>(mptr.ToPointer());
func(c);
printf(c); // 処理されていることを確認
System::Runtime::InteropServices::Marshal::FreeHGlobal(mptr);
C++/CLI は コミュ C++/CLI で質問しましょう

http://msdn.microsoft.com/ja-jp/library/d1ae6tz5.aspx
> まささん

ありがとうございます。
ただ,できればchar宣言などはせず,キャストする程度で引数にしたいのですが,そのようなことは可能なのでしょうか?
MSが思いつく言語やライブラリーはことごとくゴミだな
C++/CLI用とネイティブC++ではメモリの管理方法が違います。僕のかShamaroさんのようにするしかないと思います。ガーベジコレクションについて調べてみてください。

実使用上は鏡乃さんのようにSTLで変換関数を作るか、C++/CLIでfunc()のラッパーを作る方がいいような気がします。
みなさん,ありがとうございます。
解決しました!

もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
やったことはありませんが、locale.h にある wcstombs_s() を使うそうです。
> 8
http://msdn.microsoft.com/ja-jp/library/d1ae6tz5.aspx
を見もしなかったんですね〜

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

C言語とC++言語 更新情報

C言語とC++言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング