回 帖 发 新 帖 刷新版面

主题:[讨论]用copymemory拷贝含有String的Type时的问题

在一个类模块中的一函数中需要传递/返回一个自定义的类型,但是写成如下格式的函数时编译报错
public function GetAddInfo(byval index as integer) as AddInfo
'....
end function
public function SetAddInfo(byval index as integer,byval typAdd as AddInfo) as long 
'....
end function
“只有在公共对象模块中定义的公共用户定义类型可以作为参数、类模块的公共过程返回类型、公共用户定义类型的字段使用。”
即使把参数/返回类型改成variant,也不行。
“只有在公共对象模块中定义的用户定义类型才可以与变体类型强制转换或传递给后期绑定的函数”
于是想到用copymemory。
[code=c]
在标准模块中,
Public Type AddInfo
    AddName As Long    'As String*255 时不正常
    AddBZ As Long
    AddRate As Single
End Type

在类模块中,
Private m_add(2) As AddInfo

Public Function GetAddInfo(ByVal Index As Integer) As Long
    Debug.Assert Index >= 0 And Index <= 2
    CopyMemory GetAddInfo, VarPtr(m_add(Index)), 4
    Debug.Print GetAddInfo, VarPtr(m_add(Index))
End Function
Public Function SetAddInfo(ByVal Index As Integer, ByVal pTypAdd As Long) As Long
    Debug.Assert Index >= 0 And Index <= 2
    
    CopyMemory m_add(Index), ByVal pTypAdd, Len(m_add(Index))
    Debug.Print m_add(Index).AddName, m_add(Index).AddBZ, m_add(Index).AddRate, VarPtr(m_add(Index))
End Function

然后,在窗体中,
Private Sub Command1_Click()
Dim a As AddInfo
a.AddName = 213 '"test"
a.AddBZ = 89
a.AddRate = 45.45

Dim c As Class1
Set c = New Class1

Call c.SetAddInfo(0, ByVal VarPtr(a))

Dim b As AddInfo
Dim p As Long
p = c.GetAddInfo(0)
CopyMemory b, ByVal p, Len(b)
Debug.Print b.AddName, b.AddBZ, b.AddRate

End Sub

'[color=red]当结构体的AddName为String类型时,取不到后面两个成员的值[/color]

[/code]

[size=4][color=red]PS.帖子还没发出去时,突然想到干脆不指定String的长度试试,结果。。。正常。-.-||[/color][/size]

回复列表 (共9个回复)

沙发

因为255 mod 4<>0 ,没有内存对齐,所以就错了!
而单纯用String,不指定长度,实际存储的只是String的地址,长度是4,后面对齐了,后面的值正常,但你无法直接用COPYMEMORY复制STRING.

因为类模块里面不能返回公共的定长字符串,我一般是这样定义的:
type typeX
    lenStr as long      '字符串的实际长度
    nB(0 to nn) as byte 'nn是4X-1,用来存字符串
    ...
end type
这个类型相当于重新定义了String类型,但长度是固定的,而且可以直接用COPYMEMORY 复制,只是还需要写个函数把这个数组转换成字符串

板凳

看帖回帖^_^

3 楼

[url=http://www.newhotshoes.com]Christian louboutin [/url]
[url=http://www.newhotshoes.com/]christian louboutin sale[/url]
[url=http://www.newhotshoes.com/christian-louboutin-news-2010-c-54.html]christian louboutin shoes[/url]
[url=http://www.newhotshoes.com/]sale christian louboutin[/url]
[url=http://www.usachristianlouboutin.com/]Christian louboutin [/url]
[url=http://www.usachristianlouboutin.com/]christian louboutin discount[/url]
[url=http://www.usachristianlouboutin.com/]Christian Louboutin Pumps[/url]
[url=http://www.newhotshoesaleristian-louboutin-dorsays-c-52.html]Christian Louboutin d'Orsays[/url]
[url=http://www.newhotshoes.com/]Christian Louboutin Boots[/url]
[url=http://www.usachristianlouboutin.com/]Christian Louboutin Pumps[/url]
[url=http://www.newhotshoes.com/christian-louboutin-sandals-c-40.html]Christian Louboutin Sandals[/url]
[url=http://www.newhotshoes.com/christian-louboutin-shoes-c-38.html]Christian Louboutin Shoes[/url]
[url=http://www.usachristianlouboutin.com]Christian Louboutin Slingback[/url]
[url=http://www.newhotshoes.com/christian-louboutin-wedges-c-39.html]Christian Louboutin Wedges[/url]
[url=http://www.newhotshoes.com/giuseppe-zanotti-shoes-c-53.html]Giuseppe Zanotti Shoes[/url]
[url=http://www.usachristianlouboutin.com/jimmy-choo-shoes-c-41.html]Jimmy Choo Shoes[/url]
[url=http://www.newhotshoes.com/manolo-blahnik-c-43.html]Manolo Blahnik[/url]
[url=http://www.newhotshoes.com/manolo-blahnik-boots-c-46.html]Manolo Blahnik Boots[/url]
[url=http://www.newhotshoes.com/manolo-blahnik-slingback-c-47.html]Manolo Blahnik slingback[/url]
[url=http://www.newhotshoes.com/sergio-rossi-c-55.html]Sergio Rossi[/url]
[url=http://www.newhotshoes.com/yves-saint-laurent-c-42.html]Yves Saint Laurent[/url]
[url=http://www.newhotshoes.com/alexander-wang-c-56.html]Alexander Wang [/url]


Why do women love [URL=http://www.usachristianlouboutin.com/]christian louboutin [/URL]PUMPS? Why obsession the world of [URL=http://www.usachristianlouboutin.com]christian louboutin discount[/URL]pumps?  Perhaps because christian louboutin shoes shaped women's posture; perhaps because
[URL=http://www.newhotshoes.com]christian louboutin shoes[/URL] given women the magic of rebirth.you may choose christian louboutin!!!!


4 楼

玩农场,玩游戏,不如来玩能赚钱的农场:
全国首创巨大的偷菜赚钱,寻宝赚钱..等等
两类玩家--推广员和免费的玩家
永久免费--任何一个玩家免费玩
寻宝系统--每日10万元现金分享
魔法系统--结出金锭兑现现金
结婚系统--相互关爱,体验爱情
养育系统--上线拥有孩子打招呼
聊天系统--独一无二的聊天系统
届时欢迎团队领导人,抢占高位,抢占先机..
了解没损失,选择很重要,赚钱有方法
 联络QQ908889846  
 http://www.thxt999.com/Member.asp?u_id=cdc666
免费玩奇迹农场:首先打开摩客奇迹农场官方游戏网站.   http://www.ga-me.hk/ 点马上注册.  ID号码是六位数以上的字母和数字组合的都可以.推广员ID号写我的ID cdc666

5 楼

C易特元亨QQ919169870
最新互助式项目。
这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网赚取6000元出局。
B网就多了。
详情了解加QQ919169870 
  http://blog.sina.com.cn/s/blog_6b19ec920100liv6.html
C易特奖励制度 
http://blog.sina.com.cn/cyite6
C易特更多资料博客

6 楼



The first [url=http://www.mmopowerlevel.net]wow power leveling[/url] thing that you have to do when thinking of a [url=http://www.mogxe.com/PowerLevel.php?gid=1]wow power leveling[/url] technological item as gifts is that you have to make [url=http://www.mogxe.com/PowerLevel.php?gid=21]cheap aion power leveling[/url] sure that the person you are giving this gift to doesn’t have it yet. After all, it can be expensive and they would appreciate it more if they don’t have it yet. You can ask them first on what item they would want for Christmas. If you want it as a [url=http://www.mmopowerlevel.net/powerlist.php?fid=688]wow power leveling[/url] surprise then you can just ask people around them on what techie stuff that would please them.
Uniqueness is also very important. Try giving [url=http://www.mogxe.com/BuyGold.php?gid=1]wow gold[/url] a gift that is not ordinary and useful at the same time like [url=http://www.mmopowerlevel.net/buy.php]warcraft gold[/url] spy cameras. These cameras are great because these gadgets are small enough to fit into your palm [url=http://www.mogxe.com/BuyGold.php?gid=21]aion gold[/url] and can be a unique gadget to own. The person that receives this gift would surely be in awe in receiving such a cool item. They are very useful if you own a store because [url=http://www.mogxe.com/PowerLevel.php?gid=1]cheap wow power leveling[/url] you can hide them anywhere you want. Try giving it [url=http://www.mogxe.com/PowerLevel.php?gid=1]buy wow power leveling[/url] now and you’ll see the wonderful reaction the person that [url=http://www.mmopowerlevel.net/powerlist.php?fid=7422]aion powerleveling[/url] receives this gift.



7 楼

[url=http://www.worldgodshop.com/]Supra Shoes[/url]   [url=http://www.worldgodshop.com/]Radii shoes[/url]  [url=http://www.worldgodshop.com/]Prada Shoes[/url]   [url=http://www.worldgodshop.com/]Jordan shoes[/url]  [url=http://www.worldgodshop.com/]Christian Louboutin shoes[/url] 
http://www.worldgodshop.com/

8 楼

[url=http://www.legendstrade.com]Jordan shoes [/url]
[url=http://www.legendstrade.com] Nike Dunk SB Shoes [/url]
[url=http://www.legendstrade.com] Nike air Yeezy shoes [/url]
[url=http://www.legendstrade.com] Nike air max shoes [/url]
[url=http://www.legendstrade.com] Nike Air Shox shoes [/url]
[url=http://www.legendstrade.com] RADII Footwear [/url]
[url=http://www.legendstrade.com/jordan-4-iv-shoes-c-1_15.html] Jordan 4 (IV) shoes [/url]
[url=http://www.legendstrade.com/jordan-8-viii-shoes-c-1_19.html] Jordan 8 (VIII) shoes [/url]
[url=http://www.legendstrade.com/jordan-11-xi-shoes-c-1_22.html] Jordan 11 (XI) shoes [/url]
[url=http://www.legendstrade.com/jordan-12-xii-shoes-c-1_23.html] Jordan 12 (XII) shoes [/url]
[url=http://www.legendstrade.com/jordan-13-xiii-shoes-c-1_24.html] Jordan 13 (XIII) Shoes [/url]
[url=http://www.legendstrade.com/jordan-14-xiv-shoes-c-1_196.html] Jordan 14 (XIV) shoes [/url]
[url=http://www.legendstrade.com/jordan-18-xviii-shoes-c-1_200.html]Jordan18(XVIII)Shoes [/url]
[url=http://www.legendstrade.com/air-jordan-fusion-3-c-1_221.html] Air Jordan Fusion 3 [/url]
[url=http://www.legendstrade.com/new-arrival-dunk-low-men-shoes-c-31_420_422.html] New Arrival Dunk Low Men Shoes [/url]
[url=http://www.legendstrade.com/new-arrival-dunk-high-men-shoes-c-31_420_421.html]New Arrival Dunk High Men Shoes [/url]
[url=http://www.legendstrade.com/nike-dunk-low-men-c-31_32.html] Nike Dunk Low Men [/url]
[url=http://www.legendstrade.com/nike-dunk-high-men-c-31_34.html] Nike Dunk High Men [/url]
[url=http://www.legendstrade.com/shox-r2-shoes-c-83_257.html] Shox R2 Shoes [/url]
[url=http://www.legendstrade.com/gucci-shoes-high-top-c-3_4.html] Gucci Shoes High Top [/url]
[url=http://www.legendstrade.com/prada-low-men-shoes-c-305_306.html] prada low men shoes [/url]
[url=http://www.legendstrade.com/prada-high-men-shoes-c-305_307.html] prada high men shoes [/url]
[url=http://www.legendstrade.com/vlado-shoes-c-190.html] Vlado shoes [/url]
[url=http://www.legendstrade.com/supra-shoes-c-25.html] Supra Skytop [/url]
[url=http://www.legendstrade.com/lv-men-shoes-c-85_110.html] LV Men Shoes [/url]
[url=http://www.legendstrade.com/lv-men-high-top-shoes-c-85_111.html] LV Men High Top Shoes [/url]
[url=http://www.legendstrade.com/dg-low-men-shoes-c-286_310.html] D&G low men shoes [/url]
[url=http://www.legendstrade.com/dg-high-men-shoes-c-286_311.html] D&G high men shoes [/url]
[url=http://www.legendstrade.com/christian-louboutin-pumps-c-86_100_101.html] Christian Louboutin Pumps [/url]
[url=http://www.legendstrade.com/jimmy-choo-shoes-c-86_104.html] Jimmy Choo Shoes [/url]
[url=http://www.legendstrade.com/monster-headphones-c-144.html] Monster Headphones [/url]







[url=http://www.shoes4world.com]Jordan shoes [/url]
[url=http://www.shoes4world.com] Nike Dunk SB Shoes [/url]
[url=http://www.shoes4world.com] Nike air Yeezy shoes [/url]
[url=http://www.shoes4world.com] Nike air max shoes [/url]
[url=http://www.shoes4world.com] Nike Air Shox shoes [/url]
[url=http://www.shoes4world.com] RADII Footwear [/url]
[url=http://www.shoes4world.com/jordan-4-iv-shoes-c-5_23.html] Jordan 4 (IV) shoes [/url]
[url=http://www.shoes4world.com/air-jordan-8-viii-shoes-c-5_35.html] Jordan 8 (VIII) shoes [/url]
[url=http://www.shoes4world.com/air-jordan-11-xi-shoes-c-5_38.html] Jordan 11 (XI) shoes [/url]
[url=http://www.shoes4world.com/air-jordan-11-xi-shoes-c-5_38.html] Jordan 12 (XII) shoes [/url]
[url=http://www.shoes4world.com/air-jordan-13-xiii-men-shoes-c-5_166.html] Jordan 13 (XIII) Shoes [/url]
[url=http://www.shoes4world.com/air-jordan-14-xiv-shoes-c-5_40.html] Jordan 14 (XIV) shoes [/url]
[url=http://www.shoes4world.com/air-jordan-18-xviii-men-shoes-c-5_172.html]Jordan18(XVIII)Shoes [/url]
[url=http://www.shoes4world.com/air-jordan-fusion-4-c-5_305.html] Air Jordan Fusion 4 [/url]
[url=http://www.shoes4world.com/new-arrival-dunk-high-men-shoes-c-1_569_570.html] New Arrival Dunk High Men Shoes [/url]
[url=http://www.shoes4world.com/new-arrival-dunk-low-men-shoes-c-1_569_571.html] New Arrival Dunk Low Men Shoes [/url]
[url=http://www.shoes4world.com/nike-dunk-low-men-c-1_2.html] Nike Dunk Low Men [/url]
[url=http://www.shoes4world.com/nike-dunk-high-mens-c-1_4.html] Nike Dunk High Men [/url]
[url=http://www.shoes4world.com/shox-r3-shoes-c-158_325.html] Shox R3 Shoes [/url]
[url=http://www.shoes4world.com/gucci-low-men-shoes-c-49_55.html] GUCCI Low men shoes [/url]
[url=http://www.shoes4world.com/gucci-high-men-shoes-c-49_61.html] GUCCI high men shoes [/url]
[url=http://www.legendstrade.com/prada-high-men-shoes-c-305_307.html] prada low men shoes [/url]
[url=http://www.shoes4world.com/vlado-shoes-c-554.html] Vlado shoes [/url]

9 楼

能不能简单讲一下什么是内存对齐?我好像听到过几次了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册