VB6 中的 C++ 代码翻译
Posted
技术标签:
【中文标题】VB6 中的 C++ 代码翻译【英文标题】:C++ code translation in VB6 【发布时间】:2014-12-01 20:06:14 【问题描述】:我有一个 C dll,我想在 vb6 中使用它,这里是 C 语法:
#ifndef _MSC_VER
typedef long long INT64T;
#else
typedef __int64 INT64T;
#endif
int Init(int opts, void *key, INT64T offs);
我已将其转换为 VB6:
Public Declare Function Init Lib "x.dll" (ByVal opts As Integer, ByVal key As Long, ByVal offs As Currency)
然后调用它:
Init 0, 0, 0
函数的某些部分被执行并且我得到了这个错误:
错误的 DLL 调用约定
请您告诉我有什么问题吗?该dll来自第三方dll,所以我对此一无所知,
【问题讨论】:
int = vb6 Long(32 位),short = 整数(16 位)。确保为 32 位操作系统目标编译,如果为 64 位编译,则指针大小为 64 位 VB6 无法编译为 64 位,因此如果 DLL 为 64 位,则无法从 VB6 中使用 我也不认为货币的东西会起作用...... 【参考方案1】:对于 64 位,您应该使用:
Type ULARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
你的声明应该是这样的:
Public Declare Function Init Lib "x.dll" (ByVal opts As Long, ByVal key As Long, ByVal offs As ULARGE_INTEGER)
Public Declare Sub CopyMemory Lib "kernel32" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
现在开始转换:
获得ULARGE_INTEGER
后,您可以将其翻译为Currency
,如下所示:
' Copy int64 into the Currency data type
Dim curr as Currency
Dim int64 as ULARGE_INTEGER
' Copy ULARGE_INTEGER into the Currency data type
CopyMemory curr, int64, 8
' Multiply by 10000 to move Visual Basic decimal point to the end of the actual number
curr = curr * 10000
从Currency
遍历回ULARGE_INTEGER
:
Dim curr as Currency
Dim int64 as ULARGE_INTEGER
' Devide by 10000 to move Visual Basic decimal point to original position
curr = curr * 0.00001
' Copy Currency into the ULARGE_INTEGER data type
CopyMemory int64, curr, 8
【讨论】:
Thx SHR,但我仍然使用 ULARGE_INTEGER 得到“错误的 DLL 调用约定”以上是关于VB6 中的 C++ 代码翻译的主要内容,如果未能解决你的问题,请参考以下文章