- 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
本文件僅供參考。本文件所包含的資訊代表了在發布之日,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...