加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[VB.NET].net结构体的传递问题,急!!!!!

发布时间:2020-12-16 23:43:08 所属栏目:大数据 来源:网络整理
导读:.net结构体的传递问题,急!!!!! 我用vc.net编写了一个dll,使用了一个结构体,其中有个量是数组,结构体采用指针传递模式, 在vb.net中调用dll的函数声明为byref传递结构体,调试发现vc收到的数据和要传送的不一致,好像变了。 哪位大虾对此比较明白,请
.net结构体的传递问题,急!!!!! 我用vc.net编写了一个dll,使用了一个结构体,其中有个量是数组,结构体采用指针传递模式, 在vb.net中调用dll的函数声明为byref传递结构体,调试发现vc收到的数据和要传送的不一致,好像变了。 哪位大虾对此比较明白,请指教 __________________________________________________________________________ 结构体是值传递而不是引用传递 __________________________________________________________________________ 就这么简单描述一下,鬼知道怎么回事! __________________________________________________________________________ 你用VC写的那个Dll是非托管的Dll吗? 如果是托管Dll或许不会有这种问题吧 如果是非托管Dll,结构体的内部构造可能和托管的不同,因此,好像需要控制什么变量布局之类的,以前看过一点这方面的东西 __________________________________________________________________________ 写一个托管非托管混合DLL来做桥吧 __________________________________________________________________________ 非常感谢大家,但还没解决,都忙了快2天了 可能我说的不太明白,再详细说明一下 我调式vc。net的时候发现收到的结构体中的BlockID,SecID,CardID完全正常,但是 KeyB内容中的数值不对,执行后在vb中可以看到b和a中的竟然完全一样。 下面是相关的代码 ------------------------------------------------------------------ vc.net中的代码 typedef struct _CARD { unsigned char BlockID; unsigned char SecID; unsigned char KeyB[6]; unsigned char CardID; } CARD,* p_CARD; MI_CARD_API long WINAPI IssueUserCard(p_CARD user_card,unsigned long * CardSN,p_CARD user_card1) { memcpy(user_card1,user_card,9); } ------------------------------------------------------------------- vb中的代码 Public Declare Auto Function IssueUser Lib "test " (ByRef UCardStructure As CARD,ByRef aa As CARD) As Integer ''发行用户 Public Structure CARD Public BlockID As Byte Public SecID As Byte Public key() As Byte Public CardID As Byte End Structure Private Sub Button15_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button15.Click dim a,b as card dim i as integer redim a.key(6) redim b.key(6) a.BlockID =1 a.SecID =2 for i=0 to 5 a.key(i)=i+3 next i a.CardID=9 i=IssueUserCard(a,b) End Sub __________________________________________________________________________ 各路高手请看看呀,我急啊 __________________________________________________________________________ [StructLayout(StructLayout.Sequential)] //加上这一句试试 Public Structure CARD Public BlockID As Byte Public SecID As Byte Public key() As Byte Public CardID As Byte End Structure __________________________________________________________________________ [StructLayout(StructLayout.Sequential)] //加上这行 Public Structure CARD Public BlockID As Byte Public SecID As Byte [MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]//还要在这里加上这行! Public key() As Byte Public CardID As Byte End Structure __________________________________________________________________________

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读