函数声明 VC++ 生成了个DLL sha.dll函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])如果我想使用VB调用这个函数 改怎么声明呢,在线等待 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Dim M(0 To 31) As ByteDim p(0 To 31) As ByteDelclare Procedure Meid_To_pESN Lib "sha.dll" (Meid() As Byte,pESN() As Byte)Call Meid_To_pESN(M,p) Dim M(0 To 31) As ByteDim p(0 To 31) As ByteDeclare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p) 呵呵,不好意思。一时昏了头,拼错了一个单词,又和DELPHI搞混了。 楼上的兄台,看来你还是吧VB VC弄的有点混淆了VB中M,p不能代表一个数组吧? 提示错误compile error:type mismath: array or user-defined type expected public M(0 To 31) As Bytepublic p(0 To 31) As ByteDeclare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p) 生成EXE以后运行就没有错误了,但是不能得到正确的值啊BYTE型数组传递成字符串 好像 就不是一对一的传递了,而是两个BYTE对应一个字符,要通过ASCILL码换算 关键看你的C程序对数组是怎么处理的,是当作数组呢,还是字符窜,还是unicode字符串。不同的方式vb中的声明也不同。 比如,如果C中是ANSI string则VB中要定义为string类型,并且以byval方式传递:Dim M As StringDim p As StringDeclare Sub Meid_To_pESN Lib "sha.dll" (ByVal Meid As String, ByVal pESN As String)Call Meid_To_pESN(M, p) 上面的方法我试过了 可以得到正确的结果,但是请问 PESN为什么要以BYVAL方式传递呢如果以BYREF传递就会报错,而且我想多问一句,调用C的DLL时,为什么不生成EXE,调试的时候运行会报BAD DLL....的错误呢3Q 因为vb的string类型本身实质上就是一个指针,指向字符串的首地址。程序运行是加载dll时,如果没有指明绝对路径,首先会在当前目录中寻找,然后到windows,system32等目录中查找,再到path环境变量所示的目录中寻找。如果把dll放在工程目录中,exe文件当然一下就找到dll了,如果在vb中运行程序,则当前目录是vb所在的目录,当然找不到dll了。 但是VB中 是可以BYREF传递STRING型变量的啊我用VB做过这样的DLL,设置一个BYREF型的STRING变量,用来返回函数结果描述 那么C函数中的参数应该定义成BSTR*类型的才行。这里的状况比较多哦,一言难尽。 vb程序的打包及安装问题 treeview的数据绑定问题,求助 VB中关于字符串截取的问题 不能启动主安装程序 初级问题:INNER JOIN vs WHERE 关于mschartx轴显示文本问题? 关于库存计算的探讨 有无控件可以代替mschart控件 关于简话程序加快速度的问题 datagrid的问题,如何解决? VB 多行合并 何时必须要 err.clear 呢?好象这个清除会自动执行,何时必须显式执行呢?
Dim p(0 To 31) As Byte
Delclare Procedure Meid_To_pESN Lib "sha.dll" (Meid() As Byte,pESN() As Byte)Call Meid_To_pESN(M,p)
Dim p(0 To 31) As Byte
Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p)
VB中M,p不能代表一个数组吧?
compile error:
type mismath: array or user-defined type expected
public p(0 To 31) As Byte
Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p)
BYTE型数组传递成字符串 好像 就不是一对一的传递了,而是两个BYTE对应一个字符,要通过ASCILL码换算
Dim M As String
Dim p As String
Declare Sub Meid_To_pESN Lib "sha.dll" (ByVal Meid As String, ByVal pESN As String)Call Meid_To_pESN(M, p)
如果以BYREF传递就会报错,
而且我想多问一句,调用C的DLL时,为什么不生成EXE,调试的时候运行会报BAD DLL....的错误呢
3Q
程序运行是加载dll时,如果没有指明绝对路径,首先会在当前目录中寻找,然后到windows,system32等目录中查找,再到path环境变量所示的目录中寻找。如果把dll放在工程目录中,exe文件当然一下就找到dll了,如果在vb中运行程序,则当前目录是vb所在的目录,当然找不到dll了。
我用VB做过这样的DLL,设置一个BYREF型的STRING变量,用来返回函数结果描述