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++ 代码翻译的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 中的 QtLinguist 将程序翻译成语言?

将python字典翻译成C++

注释会被翻译成机器代码吗? C++

Matlab 到 C++ 的翻译

由 C++ 编译器优化时,F2C 翻译的代码中断

是否可以同时调试 VB6 和 C++ COM dll?