//VC编写的OS_POWER.DLL的部份代码如下:
BYTE v_BFrom_val ;
BYTE v_BTo_val ;
void WINAPI ConfigTestParameter(BYTE bTestType ,BYTE bFromVal ,BYTE bToVal ,BYTE bChannelState)
{
if (1 == bTestType) //循环测试
v_BFrom_val = bFromVal ;
v_BTo_val = bToVal ;
v_iArrayLen = 352 ; //回读88组数据,没有检测的通道全为零
}
else if(2 == bTestType) //单脚单独测试
{
v_BTest_Type = 0x55 ;
v_BTo_val = bToVal ;
v_iArrayLen = 1 * 4 ;
}
else if(3 == bTestType) //单脚单独特殊测试
{
v_BTest_Type = 0x22 ;
v_BFrom_val = bFromVal ;
v_iArrayLen = 1 * 4 * 2 ;
}
else
{
MessageBox(NULL ,"请正确选择测试类型!" ,"提示: " ,MB_OK) ;
return;
}
}
BYTE WINAPI BackNum1()
{
return v_BFrom_val;
}
BYTE WINAPI BackNum2()
{
return v_BTo_val;
}
VB声明:
Declare Sub ConfigTestParameter Lib "OS_POWER_Dll.dll" (ByVal bTestType As Byte, ByVal bFromVal As Byte, ByVal bToVal As Byte, ByVal bChannelState As Byte)
Declare Function BackNum1 Lib "OS_POWER_Dll.dll" () As Byte
Declare Function BackNum2 Lib "OS_POWER_Dll.dll" () As Byte
VB调用:
Private Sub cmdOutput_Click()
Call ConfigTestParameter(1, Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
Print BackNum1 ‘获取DLL里的v_BFrom_val值
Print BackNum2 ‘获取DLL里的v_BTo_val
End Sub
当在Text1.Text 输入 2, Text2.Text 输入 20时,为什么获取的DLL的v_BTo_val值总是0呢,不是Text2.Text里的20啊,不知是何解啊.
我程序没有返回Text3的值啊,在DLL里,第一个参数是常量,第二个参数VAL(Text1)传递进去,赋给了v_BFrom_val,第三个参数VAL(TEXT2)传递进去,赋给了v_BTo_val啊,第四个参数VAL(TEXT3)在这部份代码里,没用到啊.烦请再帮忙分析下.
追答Print BackNum1 ‘获取DLL里的v_BFrom_val值
Print BackNum2
VB在没有定义变量时,你用了 VB自动初始化 其职就是0
BackNum1 =ConfigTestParameter(1, Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
Print BackNum1
这样试试,我没见什么函数返回俩值的
BackNum1 和BackNum2不是变量啊,是调用的DLL里的函数啊。VB是可以这样调用DLL函数的,我以前都是这样调用的,没有任何问题。这个问题把我搞郁闷了。
追答那你别偷懒了 val换cbyte吧
不是变量类型的问题,v_BFrom_val的值可以正确输出啊,只是v_BTo_val总是输出零.
追答如果v_BFrom_val是正确的,而v_BTo_val总是零,那就比较费解了。
看不出问题,帮你顶吧……
会不会是调用方式的问题?stdcall、cdecl、pascal三种方式的压栈顺序是不同的。在dll中用MessageBox把入参都打出来看看吧。
不是调用方式的问题.如果是调用方式的问题的话,那v_BFrom_val应该也不正确啊,这个问题很纠结啊.
这里不是来听你说风凉话的,你自己才不会,请不要乱叫.
通常说别人可笑的人,自己是非常讨人"可笑"的.
鉴定完毕!
你不会调用 ,别逞强,还不承认