我试图在我的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并将其传递给基于C的Dll?
答案 0 :(得分:4)
在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位值,该值等效于外部API中的char
。如果调用失败,则归因于与参数类型无关的其他原因。