下面的是dll中函数,在用vb调用它是在参数的类型上还有什么要变化的吗?我按照函数要求的类型调用后老运行到该函数时出现错误,是不c语言中long和double要在vb中定义位其他格式啊?请高手指点指点!!!我的vb程序上实在是找不出什么错误,高手帮忙谢谢!! 
bool WtSys_GetData(int VehicleID ,int TransNum ,long GrossWeight,int AxisCount, double Speed,double Acceleration, int Direction) 
参数: int VehicleID (缓存的车辆序号(1、2、…)); 
返回值: 
int TransNum (流水号); 
long GrossWeight (总重); 
int AxisCount (轴组数); 
double Speed (速度); 
double Acceleration (加速度); 
int Direction (行驶方向 0---正常行驶 1---倒车); true 取数据成功; 
false 取数据失败。
 
vb调用程序如下: 
Private Declare Function WtSys_GetData Lib "C:\WtSys_Dll.dll" _ 
(ByVal VehicleID As Integer, ByVal TransNum As Integer, _ 
ByVal GrossWeight As Long, ByVal AxisCount As Integer, _ 
ByVal Speed As Double, ByVal Acceleration As Double, _ 
ByVal Direction As Integer) As Boolean WtSys_GetData VehicleID, TransNum, GrossWeight, AxisCount, Speed, Acceleration, Direction 
Text1.Text = Text1.Text & "流水号:" & TransNum & vbCrLf 
Text1.Text = Text1.Text & 总重:" & GrossWeight & vbCrLf 
Text1.Text = Text1.Text & "轴组数:" & AxisCount & vbCrLf 
Text1.Text = Text1.Text & "速度:" & Speed & vbCrLf 
Text1.Text = Text1.Text & 加速度:" & Acceleration & vbCrLf 
Text1.Text = Text1.Text & "方向:" & Direction & vbCrLf

解决方案 »

  1.   

    bool WtSys_GetData(int VehicleID ,int TransNum ,long GrossWeight,int AxisCount, double Speed,double Acceleration, int Direction) Private Declare Function WtSys_GetData Lib "C:\WtSys_Dll.dll" (ByVal VehicleID As Long, ByRef TransNum As Long, 
    ByRef GrossWeight As Long, ByRef AxisCount As Long, ByRef Speed As Double, ByRef Acceleration As Double, 
    ByRef Direction As Long) As Long 
      

  2.   

    太感谢了,问题解决了,真是高手啊!!再次感谢!
    您能说一下什么时候用byval和byref吗?通过什么来判断用哪一个?
      

  3.   


    输入参数一般是通过传值,所以用 Byval;输出参数必须传址(指针),所以用 Byref(但字符串例外,因为 VB 的字符串传的已经是指针,用 ByVal)。我上面代码中仅仅是猜测。在 C 代码中应该对指针加 * 号的,一看便知。