如何从VB6应用程序将char参数传递到C DLL?

时间:2019-05-13 12:40:25

标签: c vb6

我试图在我的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?

1 个答案:

答案 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。如果调用失败,则归因于与参数类型无关的其他原因。