Stringからcharへ

[戻る]
ゆう 2005/06/17(金) 09:52:35
VC++.NET2003にて開発を行っております。

String *a = "abc";
となっているStringの中の"abc"と言う文字列を
charの配列に取り出したいのですがやり方がわかりません。

どなたかご教授くださいませ。
よろしくお願いします。

まきじ 2005/06/17(金) 10:01:44
マルチポストは駄目ですよ。

http://www.vcppclub.com/bbs1/wforum.cgi?page=0&mode=

ゆう 2005/06/17(金) 10:06:44
すいません。以後気をつけます。

Blue 2005/06/17(金) 10:07:38
こちらを参考に
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13908&forum=7&7

ゆう 2005/06/17(金) 11:10:24
ありがとうございます。

System.Text.Encoding.Default.GetChars()

の使い方がいまいちわかりません。
色々やってみているのですがうまくコンパイルが通りません。

もうすこし具体的にどうしたらよいか教えていただけませんでしょうか?

Blue 2005/06/17(金) 11:24:33
ちょっとそのまえに、

char*型の変数をどう扱いたいのですか?

Blue 2005/06/17(金) 11:32:31
MSDNのGetCharsメソッドのC++のサンプルは参考になりませんかねぇ。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemtextencodingclassgetcharstopic
.asp
(↑おそらく複数行になるのでうまくつなげてください)

ゆう 2005/06/17(金) 11:33:17
現在VC++.net 2003 にて開発を行っています。

アプリのなかで指定されたEXCELファイルに対して
データを追加して保存させようとしています。

下記のOpen()のファイル名を画面のテキストエリアから取得して、
一旦System.Stringに格納しています。

String *aaa ;

WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbooksPtr pBook  = pBooks->Open( aaa );

Open(aaa)で System::String __gc *から_bstr_tに変換できませんとエラーになってし
まいます。

_WorkbooksPtr pBook  = pBooks->Open( "c:\\aaa.xls" );
と行うと実行可能であることから

String 内の文字列をchar*へ入れることが出来れば解決するのでは?と考えたためで
す。

Blue 2005/06/17(金) 11:45:42
>Open(aaa)で System::String __gc *から_bstr_tに変換できませんと
ならば char型配列 じゃないやん。

普通に _bstr_t(unicode文字列) にしてあげればいいのでは?

ゆう 2005/06/17(金) 11:49:50
Stringから_bstr_tへ変換できるのでしょうか?

String *a = "abc";

pBook = pBooks->Open( _bstr_t(a) );

とすると System::String __gc*から_bstr_tに変換できません。とエラーが出てしまい
ます。

Blue 2005/06/17(金) 12:03:04
pBook = pBooks->Open( System.Convert.ToChar( str ) );
はどう?
pBook = pBooks->Open( ( _bstr_t )System.Convert.ToChar( str ) );
は?

実行環境がないのでなんともいえないです。。。

Blue 2005/06/17(金) 12:05:53
>pBook = pBooks->Open( System.Convert.ToChar( str ) );
>はどう?
>pBook = pBooks->Open( ( _bstr_t )System.Convert.ToChar( str ) );
ごめん。ぜんぜんちがったっぽい。

StringクラスのメソッドやEncodingクラスなどいろいろしらべてみては。

Blue 2005/06/17(金) 12:53:42
pBook = pBooks->Open( str->ToCharArray() );
でよさそう。

というか、COMとの連携はStringクラスはいいのかなぁ。。。
(MFCとかのほうが楽そう)

ゆう 2005/06/17(金) 14:55:27
pBook = pBooks->Open( pathName->ToCharArray() );
としてみたのですが、
Excel::Workbooks::Open 1番目の引数を'_wchar_t __gc[]'から
'_bstr_t'に変換できません。
という警告が相変わらず出てしまいます。

各無し 2005/06/17(金) 17:34:24
Marshal.StringToBSTR ?

Blue 2005/06/18(土) 01:04:31
>Marshal.StringToBSTR ?
いろしろしらべたらカナリこれっぽいですね。

#using <mscorlib.dll>
#include <wchar.h>

using namespace System;
using namespace System::Runtime::InteropServices;

typedef wchar_t* BSTR;

int main( void )
{
    String* path1 = S"ファイルパス名";
    
    // Stringからアンマネージのwchar_tポインタを設定
    BSTR p = static_cast< BSTR >( Marshal::StringToBSTR( path1 ).ToPointer() );
    // こいつをOpenやらの_bstr_tの引数に指定する
    // 例)
    // pBook = pBooks->Open( static_cast< BSTR >( Marshal::StringToBSTR( 
path1 ).ToPointer() );
    
    // アンマネージのwchar_tポインタからStringを設定
    String* path2 = p;
    
    Console::WriteLine( "{0}", path2 );

    return 0;
}

環境 : Visual C++ Toolkit 2003 - SharpDevelop

古いスレッドには追加発言できません。