variant型のデータからchar配列に文字列を
複写する方法をご教授いただきたいとおもいます。
_variant_t ward;
//ward.bstrVal には"abcdefg"が入力されている
(ウォッチウインドウで確認できてきます。)
よろしくお願いします。
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;
}
訂正
>BSTRポインタ型
BSTR型でした。(もしくはwchar_tポインタ型)
atlbase.hにあるW2Aという関数によって複写することができました。
解決したロジックのせておきます。
お騒がせいたしました。
#include "atlbase.h"
_variant_t ward;
char gdata[15];
USES_CONVERSION; // 使用する関数の先頭に記述する
char *pward = W2A(ward.bstrVal);
strcpy(gdata, pward );
やっぱり_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 ) );
すみません、また訂正
> strcpy( s, _com_util::ConvertBSTRToString( v ) );
strcpy( s, _com_util::ConvertBSTRToString( v.bstrVal ) );
Blue さんありがとうございます。
>strcpy( s, ( _bstr_t )v );
が一番さっぱりしていてよさそうですね。
とても参考になるご回答ありがとうございました。
ツイート | ![]() |