【发布时间】:2019-05-13 12:40:24
【问题描述】:
我正在尝试在我的 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 声明为字符串,但它应该是字符。
主要问题是 char 在 VB6 中不存在。
如何从 VB6 代码声明 char 并将其传递给基于 c 的 Dll?
【问题讨论】:
-
双引号是一个字符串。单引号是一个字符。
-
在需要字符的地方尝试使用 Byte。
-
@stark 在 VB6 中,如果我尝试编写类似 lSt = SetGroupFormat("=;\n", '.', 0) 的内容,则会出现语法错误。 Char 在 VB6 中甚至不能声明。 VB.Net 有 Char 但没有 VB6。如果我没记错的话,VBA 通常没有 char 类型。
-
注意,我从问题中删除了 C++ 标签。尽管 DLL 显然恰好是用 C++ 编写的,但这与问题无关,因为 VB6 本机 DLL 导入仅通过 C ABI 接口发生。
-
Char与 VB6Byte是相同的二进制表示。所以Asc("A")。as byte或as any.