發文作者:wekon | 十一月 17, 2008

How to concatenate BSTR strings in the mobile device environment

e69caae591bde5908d-12
(http://msdn.microsoft.com/en-us/library/ms221069.aspx)

BSTR 是個麻煩的東西
要對字串做處理很難做
很多人建議使用 CComBSTR
但是這東西在 mobile device environment 似乎有問題
連初始化都會失敗


於是參考了某個 source code
用 memcpy 跟他硬拼

BSTR js1=L"javascript:void(alert(‘";
BSTR js2=L"ok!";
BSTR js3=L"‘));";
BSTR link;

long len1=wcslen(js1);
long len2=wcslen(js2);
long len3=wcslen(js3);

link = SysAllocStringLen(NULL, len1+len3+len2);

memcpy(link,js1,len1*sizeof(OLECHAR));
memcpy(link+len1,js2,len2*sizeof(OLECHAR));
memcpy(link+len1+len2,js3,len3*sizeof(OLECHAR));

原本的 source code 使用的是 SysStringLen 來計算長度
但是每次到這裡都會掛掉
改用 wcslen 就可以了

奇怪的是
明明說要有 terminator
但是如果加上以下這行:

link[len1+len2+len3]=NULL;

反而會掛掉
不寫反而沒事


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

分類

%d 位部落客按了讚: