首页 > 解决方案 > 如何将 char 参数从 VB6 应用程序传递给 C DLL?

问题描述

我试图在我的 VB6 应用程序中调用 C 函数。问题是该函数将 simplechar作为参数。不是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 声明为字符串,但它应该是 char。

主要问题是 char 在 VB6 中不存在。

如何从 VB6 代码声明并将 char 传递给基于 ac 的 Dll?

标签: cvb6

解决方案


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


推荐阅读