前端之家收集整理的这篇文章主要介绍了
[VB.NET].net结构体的传递问题,急!!!!!,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
.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 __________________________________________________________________________
原文链接:https://www.f2er.com/vb/263746.html