結構或大記憶體塊打包的辦法(上1 1)

2021-04-14 12:20:22 字數 3239 閱讀 1786

- microsoft visual c++ 6.0,sp5

結構

大記憶體塊打包的辦法(上1.1

revision history:

version

date

creator

description

1.0.0.1

2004-2-23

鄭昀草稿

implementation scope

nsafearray

nistream

nmicrosoft m**q

目錄:1:

概述

2:

借用

safearray

打包把結構寫入

m**q

佇列

3:借用

istream

流打包傳遞資料到

m**q佇列

1.

概述

通常我們建議通過

m**q

傳遞基於

xml的字串,但有時候也需要傳遞一些結構或者一些介面指標,那麼如何打包傳遞呢?

這實際上可以轉換為乙個普適問題:

如何把乙個結構體(structure object)或者巨大記憶體塊(比如5mb左右)打包為propvariant-compatible的型別?

首先,im**qmessageptr

的body

屬性接收

_variant_t引數:

inline void im**qmessage::putbody ( const _variant_t & pvarbody )

如果我們想把結構作為訊息的

body

寫入m**q

訊息佇列,我們需要把我們的結構、大記憶體塊或介面指標轉換為

_variant_t

2.借用safearray打包把結構寫入m**q佇列

把乙個結構體打包

為propvariant-compatible

的型別,需要用到

safearray

,乙個帶有邊界資訊的陣列。這是乙個常用技巧,很多文章都有提及,我就不多解釋了。

但是,注意這種方式一次只能打包65536位元組以下的資料,這是由於

safearray*safearraycreatevector(

vartypevt,

longllbound,

unsigned intcelements);

的定義所限制的。

我們通常會

用safearraycreatevector api

建立乙個單維

safearray

,分配乙個

sizeof(_data)

大小的連續記憶體塊,而這個函式的第三個引數是乙個

unsigned int

型別,所以最大值就只能是

65536

了。更多

safearray

知識,參見

使用safearray傳遞物件

下面給出打包的步驟(

vc++

**):

結構或大記憶體塊打包的辦法(上1.2)

2篇繼續介紹如何讀取這樣的

m**q

訊息。結構或大記憶體塊打包的辦法(上2)

中、下篇將介紹「

借用istream

流打包傳遞資料到

m**q

佇列」。

結構或大記憶體塊打包的辦法(中)

結構或大記憶體塊打包的辦法(下) 

disclaimers

programmer』s blog list

部落格堂

小氣的神

飛鷹手記

飛鷹手記之.net專版

蟈蟈俊

思歸

[mvpleader]grace zhang

豆腐

跟隨大象的舞步

don box's blog

eric.weblog()

the .net guy

[email protected]

本文件僅供參考。本文件所包含的資訊代表了在發布之日,zhengyun

對所討論問題的當前看法,zhengyun

不保證所給資訊在發布之日以後的準確性。

使用者應清楚本文件的準確性及其使用可能帶來的全部風險。可以複製和傳播

本文件,但須遵守以下條款:

複製時不得修改原文,複製內容須包含所有頁

;所有副本均須含有

zhengyun

;不得以贏利為目的對本文件進行傳播

結構或大記憶體塊打包的辦法(上1 1)

microsoft visual c 6.0,sp5 結構或 大記憶體塊打包的辦法 上1.1 revision history version date creator description 1.0.0.1 2004 2 23 鄭昀草稿 implementation scope nsafearra...

結構或大記憶體塊打包的辦法(上2)

microsoft visual c 6.0,sp5 結構或大記憶體塊打包的辦法 上 對本文件所有修改都應按修改時間順序記錄在此。version date creator description 1.0.0.1 2004 2 23 鄭昀草稿 n safearray nistream nmicroso...

結構或大記憶體塊打包的辦法(上2)

microsoft visual c 6.0,sp5 結構或大記憶體塊打包的辦法 上 對本文件所有修改都應按修改時間順序記錄在此。version date creator description 1.0.0.1 2004 2 23 鄭昀草稿 n safearray nistream nmicroso...