BSTRの中身を見る方法を教えてください。 – プログラミング – Home

BSTRの中身を見る方法を教えてくださ...
 
通知
すべてクリア

[解決済] BSTRの中身を見る方法を教えてください。


kuroi
 kuroi
(@kuroi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

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]'


引用未解決
トピックタグ
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 22年前
投稿: 280
 

先頭は添え字0です。
1バイトの文字比較の場合は"ではなく''を使用しましょう。
基本中の基本です。


返信引用
kuroi
 kuroi
(@kuroi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

アイススケーター様、
御解答ありがとうございました。
””から''に変更いたしましたら
うまくいきました。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 22年前
投稿: 280
 

先頭は添え字を変えないとコンパイルは通るが、思ったとおりの結果が得られない
と思いますが。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

BSTR ってのは、先頭に4バイトで長さを格納している、
非 NULL 終端文字列じゃありませんでしたっけ?
Work[ 0 ] は、その文字列部分の先頭を指すのか、それとも
正直に長さの最下位バイトを指しているのか、ちょっとわかりませんけど。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 22年前
投稿: 280
 

afxwin.hで次のように定義されていますが

#if defined(WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
typedef OLECHAR* BSTR;


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

そうでしたか。これは失礼いたしました。
VB6 の文字列は BSTR 型であり、それは先頭に長さ情報を持つ云々と聞いていたもので
すから。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

BSTRはBSTRが指すポインタの手前に長さが入っています。
http://www.microsoft.com/japan/developer/library/VBCon98/vbconpassingstringstodllprocedure.htm


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました