我正在尝试在VB6应用程序中调用C函数。问题在于该函数需要简单char
的参数。不是char
数组指针(char *
),而是常规指针char
。
它是这样声明的:
#define FM_API extern "C" int _stdcall
FM_API NVF_SetGroupFormat(char *aMarker, char aDecSeparator, int aDigits)
如果执行成功,则返回-1,否则返回0。
从一开始,我就做我一直做的事情-只是声明了而已。
这是我的声明:
Declare Function SetGroupFormat Lib "C:\Libs\FM_API.dll" Alias "NVF_SetGroupFormat" (ByVal lMarker As String, ByVal lDecSeparator As String, ByVal lDigits As Integer) As Integer
但是它总是返回0(失败/错误)。
我认为我传递的参数有问题。我打电话给dll作者寻求建议,并告诉他我如何传递参数。这是该函数的调用:
Dim lSt As Integer
lSt = SetGroupFormat("=;\n", ".", 0)
作者告诉我该调用是正确的,但他告诉我我的声明“可能”是错误的,因为我将lDecSeparator声明为String,但应为char。
主要问题是VB6中不存在char。
如何从VB6代码声明char并将其传递给基于ac的Dll?
在VB6中,您可以为此使用定长字符串:
Declare Function SetGroupFormat Lib "C:\Libs\FM_API.dll" Alias "NVF_SetGroupFormat" ( _
ByVal lMarker As String, _
ByVal lDecSeparator As String * 1, _
ByVal lDigits As Integer _
) As Integer
自从我使用VB6以来已经有一段时间了,我的知识有点生锈。如果不支持上述语法,则肯定可以进行以下操作:
Type SingleChar
Value As String * 1
End Type
Declare Function SetGroupFormat Lib "C:\Libs\FM_API.dll" Alias "NVF_SetGroupFormat" ( _
ByVal lMarker As String, _
ByVal lDecSeparator As SingleChar, _
ByVal lDigits As Integer _
) As Integer
或者,您也可以使用数据类型Byte
来表示单个8位值,等同char
于外部API。如果调用失败,则归因于与参数类型无关的其他原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句