C BSTR資料型別

2021-09-17 00:10:52 字數 1304 閱讀 6041

bstr(basic string or binary string)是com 、automatic、interop 使用的string資料型別。在從指令碼訪問的所有介面中使用bstr。

typedef wchar olechar;

typedef olechar* bstr;

typedef bstr* lpbstr;

bstr是乙個複合性的資料型別,其包含長度字首(length prefix),字串資料(data string),和結尾標誌(terminator)。

item

description

length prefix

data string

a string of unicode characters. may contain multiple embedded null characters.

terminator

a null (0x0000) wchar.

長度字首:4位元組的整數,描述字串資料的長度。出現在字串資料的第乙個字元之前。

字串資料:unicode編碼的字串,可包含多個嵌入的空字元。

結尾標誌:空的wchar

乙個bstr是乙個指標,其指向string資料的第乙個字元,而非長度字首。

bstr由com記憶體分配函式分配,所以能被函式直接返回,不用考慮記憶體的分配問題。

以下的宣告方式是不對的。

這麼寫的話編譯和鏈結是正確的,但這種寫法是錯誤的。因為bstr是復合型別,其開頭字首是描述字串長度的,中間才是真正的資料內容,結尾還有結尾標誌。

正確的宣告方式是這樣的:

編譯器會檢查它的記憶體位址,在其前面加上長度字首和結尾標誌,因為該字串前加了『l』,表示是unicode編碼,所以長度為34。

同理,以下的轉換方式是錯誤的。

正確的轉換方式是這樣的:

bstr和char* 的轉換:

char* ->bstr:

// convertstringtobstr.cpp

#include #include #pragma comment(lib, "comsuppw.lib")

#pragma comment(lib, "kernel32.lib")

int main()

bstr->char*

// convertbstrtostring.cpp

#include #include #pragma comment(lib, "comsuppw.lib")

int main()

資料型別基礎資料型別

資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...

資料型別 基本資料型別和引用資料型別

一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...

SQL 資料型別 MySQL 資料型別

在 mysql 中,有三種主要的型別 文字 數字和日期 時間型別。資料型別 描述char size 儲存固定長度的字串 可包含字母 數字以及特殊字元 在括號中指定字串的長度。最多 255 個字元。varchar size 儲存可變長度的字串 可包含字母 數字以及特殊字元 在括號中指定字串的最大長度。...