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

VB.NET源码-156个实用实例哦…… .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
__________________________________________________________________________
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值