如何从 VB6 应用程序将 char 参数传递给 C DLL?
How to pass a char parameter to a C DLL from a VB6 application?
我正在尝试在我的 VB6 应用程序中调用 C 函数。问题在于该函数采用简单的 char
作为参数。不是 char
数组指针 (char *
),而是常规的 char
.
声明方式如下:
#define FM_API extern "C" int _stdcall
FM_API NVF_SetGroupFormat(char *aMarker, char aDecSeparator, int aDigits)
它returns如果执行成功则为-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 (fail/false)。
我认为我传递的参数有问题。我打电话给 dll 作者寻求建议并告诉他我如何传递我的参数。这是对该函数的调用:
Dim lSt As Integer
lSt = SetGroupFormat("=;\n", ".", 0)
作者告诉我这个调用是正确的,但他告诉我我的声明是 "probably" 错误的,因为我声明 lDecSeparator As String,但它应该是 char.
主要问题是 VB6 中不存在 char。
如何从 VB6 代码声明 char 并将其传递给基于 c 的 Dll?
在 VB6 中,您可以为此目的使用 fixed-length 个字符串:
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
。如果调用失败,这是由于其他原因造成的,与参数类型无关。
我正在尝试在我的 VB6 应用程序中调用 C 函数。问题在于该函数采用简单的 char
作为参数。不是 char
数组指针 (char *
),而是常规的 char
.
声明方式如下:
#define FM_API extern "C" int _stdcall
FM_API NVF_SetGroupFormat(char *aMarker, char aDecSeparator, int aDigits)
它returns如果执行成功则为-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 (fail/false)。
我认为我传递的参数有问题。我打电话给 dll 作者寻求建议并告诉他我如何传递我的参数。这是对该函数的调用:
Dim lSt As Integer
lSt = SetGroupFormat("=;\n", ".", 0)
作者告诉我这个调用是正确的,但他告诉我我的声明是 "probably" 错误的,因为我声明 lDecSeparator As String,但它应该是 char.
主要问题是 VB6 中不存在 char。
如何从 VB6 代码声明 char 并将其传递给基于 c 的 Dll?
在 VB6 中,您可以为此目的使用 fixed-length 个字符串:
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
。如果调用失败,这是由于其他原因造成的,与参数类型无关。