BSTR work
workの中に下記の値が入っているとします。
123456789
そこで文字列の先頭の値を比較したと考えて
下記のように作成したのですが、ビルドエラーがどうしても出てしまいます。
そこで何か良い対処方法をお教えください。
宜しくお願いいたします。
if ( Work[1] == 1 )
↑
この中に文字列が入っています。
error C2446: '==' : no conversion from 'char *' to 'int'
This conversion requires a reinterpret_cast,
a C-style cast or function-style cast
error C2040: '==' : 'int' differs in levels of indirection
from 'char [2]'
先頭は添え字0です。
1バイトの文字比較の場合は"ではなく''を使用しましょう。
基本中の基本です。
アイススケーター様、
御解答ありがとうございました。
””から''に変更いたしましたら
うまくいきました。
先頭は添え字を変えないとコンパイルは通るが、思ったとおりの結果が得られない
と思いますが。
BSTR ってのは、先頭に4バイトで長さを格納している、
非 NULL 終端文字列じゃありませんでしたっけ?
Work[ 0 ] は、その文字列部分の先頭を指すのか、それとも
正直に長さの最下位バイトを指しているのか、ちょっとわかりませんけど。
afxwin.hで次のように定義されていますが
#if defined(WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
typedef OLECHAR* BSTR;
そうでしたか。これは失礼いたしました。
VB6 の文字列は BSTR 型であり、それは先頭に長さ情報を持つ云々と聞いていたもので
すから。
BSTRはBSTRが指すポインタの手前に長さが入っています。
http://www.microsoft.com/japan/developer/library/VBCon98/vbconpassingstringstodllprocedure.htm