variant型のデータについてキャストするには?

解決


タカ  2006-06-12 04:32:59  No: 62142

variant型のデータからchar配列に文字列を
複写する方法をご教授いただきたいとおもいます。

_variant_t  ward;
//ward.bstrVal には"abcdefg"が入力されている
(ウォッチウインドウで確認できてきます。)

よろしくお願いします。


Blue  2006-06-12 06:05:15  No: 62143

bstrVal  は BSTRポインタ型なので、char型配列に変換するには
wcstombs関数を使って変換してください。

また、_bstr_t型を使って、const char*型を取得することも可能です。

ex)
#include <comdef.h>
#include <clocale>
#include <iostream>

int main()
{
    _variant_t v;

    v.vt = VT_BSTR;
    v.bstrVal = L"abcdefg";

    char s[ 20 ];

    setlocale( LC_ALL, "Japanese" );
    wcstombs( s, v.bstrVal, sizeof( s ) - 1 );

    std::cout << s << std::endl;

    return 0;
}


Blue  2006-06-12 06:06:05  No: 62144

訂正
>BSTRポインタ型
BSTR型でした。(もしくはwchar_tポインタ型)


タカ  2006-06-12 06:09:19  No: 62145

atlbase.hにあるW2Aという関数によって複写することができました。

解決したロジックのせておきます。

お騒がせいたしました。

#include "atlbase.h"

_variant_t  ward;
char gdata[15];

USES_CONVERSION; // 使用する関数の先頭に記述する
char *pward = W2A(ward.bstrVal); 
strcpy(gdata, pward );


Blue  2006-06-12 09:16:30  No: 62146

やっぱり_bstr_tを使ったほうが簡単。

_variant_t v( L"abcdefg" );
char s[ 20 ];

strcpy( s, ( _bstr_t )v );

_com_util::ConvertBSTRToStringてなのもありました。

_variant_t v( L"abcdefg" );
char s[ 20 ];

strcpy( s, _com_util::ConvertBSTRToString( v ) );


Blue  2006-06-12 09:17:24  No: 62147

すみません、また訂正
> strcpy( s, _com_util::ConvertBSTRToString( v ) );
strcpy( s, _com_util::ConvertBSTRToString( v.bstrVal ) );


タカ  2006-06-12 20:00:34  No: 62148

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

>strcpy( s, ( _bstr_t )v );
が一番さっぱりしていてよさそうですね。

とても参考になるご回答ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加