繁体   English   中英

如何从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)

如果执行成功则返回-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传递给基于交流的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位值,相当于外部API中的char 如果调用失败,则这是由于与参数类型无关的其他因素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM