如何从 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。如果调用失败,这是由于其他原因造成的,与参数类型无关。