用VC写的DLL文件返回一个结构体 VB可以调用吗?为什么我调用VB直接退出?附代码,分不多,请高人解答,谢谢!

love_really 2008-04-17 09:21:09
DLL 里的内容
//数据报结构体
struct DataPack
{
unsigned char Addr_Set;
unsigned char Main_Fun;
unsigned char Sec_Fun;
unsigned char Data_Len;
unsigned char Data[252];
};

DataPack _stdcall ReadInputState(int Adr,int StarAdr,int Entries)
{
InitializeCriticalSection(&g_cs);
EnterCriticalSection(&g_cs);
DataPack Dpack;
//结构体内容填充
Dpack.Addr_Set=Adr;
Dpack.Main_Fun=R_INPUTSTATE;
Dpack.Sec_Fun=NONESECFUN;
Dpack.Data_Len=4;
Dpack.Data[0]=StarAdr>>8&0x00FF; //获取StarAdr高位数
Dpack.Data[1]=StarAdr&0x00FF; //获取StarAdr低位数
Dpack.Data[2]=Entries>>8&0x00FF; //获取EndAdr高位数
Dpack.Data[3]=Entries&0x00FF; //获取EndAdr低位数
COM_SndData((unsigned char *)(&Dpack),Dpack.Data_Len+4);
Sleep(1);
try
{
memcpy(&Dpack,WhileRcv(),256);
}
catch(...)
{
Dpack.Main_Fun=0x00FF;
}

LeaveCriticalSection(&g_cs);
return Dpack;
}

以下是VB调用内容
Private Type Datapack
Adr As Variant
MainFun As Variant
SecFun As Variant
DataLen As Variant
Data() As Variant
End Type

Private Declare Function ReadInputState Lib "ModBusDll.dll" (ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Datapack

Private Sub Command1_Click()
Dim DTpk As Datapack
DTpk = ReadInputState(23, 0, 15)//执行到此句,程序退出,如果将DLL里的返回类型改为int的话就可以正常返回,返回结构体VB整个程序就会退出,无任何错误消息,请问高人,怎么解决?
End Sub
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
薛定谔之死猫 2008-04-17
  • 打赏
  • 举报
回复
为什么不选择在参数中传递结构指针来填写想返回的信息呢,直接返回结构浪费栈空间
love_really 2008-04-17
  • 打赏
  • 举报
回复
老鹰再一次呼叫小鸡!
再不来就没电了!
love_really 2008-04-17
  • 打赏
  • 举报
回复
老鹰呼叫小鸡!
老鹰呼叫小鸡!
love_really 2008-04-17
  • 打赏
  • 举报
回复
难不成要我顶成水楼就有人关注了???
love_really 2008-04-17
  • 打赏
  • 举报
回复
再顶一次!
love_really 2008-04-17
  • 打赏
  • 举报
回复
怎么这么冷清啊?都没人随便说几句?
love_really 2008-04-17
  • 打赏
  • 举报
回复
没人帮看一下啊?在线等答案~~谢谢各位路过的!

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧