プロが教えるわが家の防犯対策術!

こんにちは 目黒@C++学習中です

CComBSTR型の文字列の編集方法について教えて下さい。

既に代入済みのCComBSTR型の文字列を短くする方法がわかりません
以下はテストソースです。

sName = sName.m_str;の行を入れれば取あえず可能ですが
BoundsCheckerでエラーになります。
m_strをfreeしている為。

#スペースがトリムされてしまう、
#トリムを防ぐ方法があったら教えて下さい

#define UNICODE
#define _UNICODE
#include <windows.h>
#include <atlbase.h>
int main(void)
{
CComBSTR sName;

sName = L"012345789\\abc";
long lSize = sName.Length();
WCHAR* sP = ::StrRChr(sName,NULL,L'\\');
if (sP != NULL) {
*sP = 0;
lSize = sName.Length();
// sName = sName.m_str;
}
sName += L"efg";
return EXIT_SUCCESS;
}

A 回答 (1件)

CComBSTRは直接編集はできないと思っています。



テストソースでは最終的にsNameが012345789efgになるようにしたいと言うことですよね。たとえば、sName = L"00\\efg"なら結果は"00efg"を期待しているのですね。
BSTRはNULLを突っ込んでも長さは変わりませんよね。
ちょっと助長かもしれませんが、もう一つCComBstrを使って結果を作成するのはいかがでしょうか?
if (sP != NULL) {
 WORD size = sP - sName.m_str;
 CComBSTR Tmp(size,sName);
 sName.Empty();
 sName = Tmp;
 lSize = sName.Length();
}
sName += L"efg";
return EXIT_SUCCESS;
    • good
    • 1
この回答へのお礼

回答ありがとう

ポインターの演算を避けたいので
下記のようにしました

if (sP != NULL) {
*sP = 0;
CComBSTR sWork = sDirName.m_str;
sDirName = sWork;
}

お礼日時:2001/04/23 12:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!