c - 如何将 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?
解决方案
在 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 中。如果调用失败,这是由于与参数类型无关的其他原因。
推荐阅读
- python - python中分数计算器中的除法
- node.js - 如何解决 react-native-spotify-remote 的这个 NPM 依赖问题
- arrays - Unexpected output for this following code
- tensorflow - WSL2-$nvidia-smi 命令未运行
- python-3.x - 开发包时如何使用诗歌?
- java - 本地主机中的Mysql
- javascript - 如何从 javascript 中的方法引用中检索类?
- flutter - 在 Dart 中获取每个项目列表的平均值的最干净的方法是什么?
- javascript - 如何正确构建 React 模块化库
- sql - SQL 计算每一行的不同值