我用DELPHI写了个DLL操作并口,提供一个函数给VB,函数原型是:
function  send_array(byarray:Array of Byte):Integer;  
我在VB中调用如下:
声明:Declare Function send_array Lib "p_port.dll" (ByRef byarray() As Byte) As Integer调用:
control = Array(&H1B, &H40, &H1B, &H4B, 60, &H1B, &H4C, &H1B, &H54, 1, &H1C, &H2B, &H1B, &H57, 33, 0, 0, 0, 197, 0, 223, 0, &H1B, &H20, 6, &H20, &H1B, &H21, &H20)  
send_array(control)   (改成send_array(control())也不行)
全编译执行是报错:“类型不匹配,缺少数组或用户定义类型”
第一次用VB,不太明白,请熟悉的人指点下怎么解决。

解决方案 »

  1.   

    如果是在Delphi中输出函数的话,函数原型需要添加stdcall保留字。另外你可以试一下将函数这么定义:
    Declare Function send_array Lib "p_port.dll" (byarray As Byte) 调用:
    send_array(control(0))
      

  2.   

    另外:Declare Function send_array Lib "p_port.dll" (byarray As any) As long
      

  3.   

    TechnoFantasy(冰儿马甲www.applevb.com) 
    谢谢,我加了stdcall,刚才去掉了,我试验下你的调用方法。
      

  4.   

    zhujiechang(小朱) 
    DLL中的函数没有问题,INTEGER是可以的,我动态库中还有其他的函数,都是返回INTEGER型的,没有问题。
      

  5.   

    改成
    Declare Function send_array Lib "p_port.dll" (byarray() As Any) As Long
    看看还有不要用Array来制作数组,这样返回的是一个Variant类型而不是你要的Byte类型数组
      

  6.   

    supergreenbean(超级绿豆) 
    我改成你的申明了,但是错误还是一样。
    》》还有不要用Array来制作数组,这样返回的是一个Variant类型而不是你要的Byte类型数组
    是什么意思?我的Array是参数,不是返回的数值。
      

  7.   

    TechnoFantasy(冰儿马甲www.applevb.com) 》》Declare Function send_array Lib "p_port.dll" (byarray As Byte) 
    这样应该是只传递一个字节的BYTE值,我要的是传递一个数组。
      

  8.   

    呵呵,我说的是VB里面不要用
    control = Array(&H1B, &H40, &H1B, &H4B, 60, &H1B, &H4C, &H1B, &H54, 1, &H1C, &H2B, &H1B, &H57, 33, 0, 0, 0, 197, 0, 223, 0, &H1B, &H20, 6, &H20, &H1B, &H21, &H20)  
    来生成control数组,而不是你DELPHI里的那个Array另外你声明再改成这样看看
    Declare Function send_array Lib "p_port.dll" (byarray As Any) As Long
    然后调用的时候
    send_array(control(0))
      

  9.   

    对不起,很久没来了,所以现在才结帖
    谢谢supergreenbean(超级绿豆 - 世界上只有一种人不能得罪 —— 女人)的帮助