質問させていただきます。
現在、下記のようなコード(下記はサンプルコード)を作成し、
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;
}
String型からchar*型の方法
Re:String型からchar*型の方法
.NET の場合はわかりませんが
Visual C++ 6.0 STL の場合です
string の内容はconst char* の配列だったような気がするので変更ができなかったような・・・
Visual C++ 6.0 STL の場合です
string の内容はconst char* の配列だったような気がするので変更ができなかったような・・・
#include <iostream> using namespace std; void func( string *str ) { cout << "string:" << str->c_str() << endl; } int main() { string str( "abc" ); func( &str ); return 0; }
Re:String型からchar*型の方法
http://support.microsoft.com/kb/311259/ja
↑では?
ちなみに、ToCharArrayなど、Charが付く名前のメソッドでは、C#のchar、つまりC++/CLIではwchar_tにしかなりません。
↑では?
ちなみに、ToCharArrayなど、Charが付く名前のメソッドでは、C#のchar、つまりC++/CLIではwchar_tにしかなりません。
Re:String型からchar*型の方法
>たかぎさん
ちなみに、http://support.microsoft.com/kb/311259/ja
に書かれている方法をためしたところ(Visual C++ 2008)、
方法1は
int main()
{
String ^str = "asc";
func(PtrToStringChars(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
というコードでコンパイルしたところ、
error C2664: 'func' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
Type=const wchar_t
]
マネージ型をアンマネージ型に変換できません。
というエラーがでてしまいました。
また、方法3は
<atlstr.h>
がなかったためためしていません。
また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
ためしていません。
ちなみに、http://support.microsoft.com/kb/311259/ja
に書かれている方法をためしたところ(Visual C++ 2008)、
方法1は
int main()
{
String ^str = "asc";
func(PtrToStringChars(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
というコードでコンパイルしたところ、
error C2664: 'func' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
Type=const wchar_t
]
マネージ型をアンマネージ型に変換できません。
というエラーがでてしまいました。
また、方法3は
<atlstr.h>
がなかったためためしていません。
また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
ためしていません。
Re:String型からchar*型の方法
> また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
> ためしていません。
意味がわかりません。
方法1では、ワイド文字列しか得られませんので、そこからさらに変換する必要があります(サンプルを見ればわかりますよね?)。
> ためしていません。
意味がわかりません。
方法1では、ワイド文字列しか得られませんので、そこからさらに変換する必要があります(サンプルを見ればわかりますよね?)。
Re:String型からchar*型の方法
みなさん,ありがとうございます。
解決しました!
もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
解決しました!
もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
Re:String型からchar*型の方法
> wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
字面どおりに解釈すれば、単にキャストするか、wctob関数を使ってください。
ワイド文字から多バイト文字、あるいはワイド文字列から多バイト文字列への変換であれば、また別のやりかたがあります。
字面どおりに解釈すれば、単にキャストするか、wctob関数を使ってください。
ワイド文字から多バイト文字、あるいはワイド文字列から多バイト文字列への変換であれば、また別のやりかたがあります。