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
//数据报结构体
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
{
unsigned char Addr_Set;
unsigned char Main_Fun;
unsigned char Sec_Fun;
unsigned char Data_Len;
unsigned char Data[252];
}; Private Type Datapack
Adr As Variant
MainFun As Variant
SecFun As Variant
DataLen As Variant
Data() As Variant
End Type MS不对应,改一下参数类型