我有个DLL文件,里面有个函数是
int GasInitPort(int iPort,long lBaud,char*results);
功能描述:打开设备
输入参数:
int iPort:端口号
long lBaud:通讯波特率
输出参数:
char * results:返回操作结果说明我把它转化为VB为
<DllImport("ZJWXGas.dll", EntryPoint:="ZJWX_GasInitPort", SetLastError:=True, CharSet:=CharSet.Auto, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function ZJWX_GasInitPort(ByVal port As Integer, ByVal baud As Long, ByVal results() As  Byte) As Int16
    End Function但是一调用这个函数就出现问题???

解决方案 »

  1.   

    我觉得是声明的问题,但是char难道不是这样byte吗???
      

  2.   

    private Declare GasInitPort lib "你的DLL的地址" (byval iPort as intger ,byval  lBaud as long,Result() as byte);
      

  3.   

    private Declare GasInitPort lib "ZJWXGas.dll" (byval iPort as intger ,byval lBaud as long,byval Result() as byte);Result() 前不必加byval吗
      

  4.   

    是的,其实不能家ByVal,数组只能传递引用private Declare GasInitPort lib "ZJWXGas.dll" (byval iPort as intger ,byval lBaud as long, Result() as byte) as integer
      

  5.   

    我刚开始加了byval,一直通过不了,明天去试下,多谢了;
      

  6.   

    1、DLL文件并非只有一种格式。C 开发的 dll 输出函数必须声明为 WINAPI 的才能给 C 以外的语言调用。2、此外声明也不对,c语言的long是32位的,.net 的long 是64位的。所以 Public Shared Function ZJWX_GasInitPort(ByVal port As Int32, ByVal baud As int32, ByVal results() As Byte) As Int32 才对。假如不是原因 1,这样试试兴许行。
      

  7.   

    是long的问题,谢谢楼上的,我也发现,根本不是char的问题
      

  8.   

    是long的问题,谢谢楼上的,我也发现,根本不是char的问题