VB6中的C++代码转换

VB6中的C++代码转换,c++,visual-c++,dll,vb6,call,C++,Visual C++,Dll,Vb6,Call,我有一个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,

我有一个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,因此我对它一无所知,

对于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)
' 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
现在谈谈转换:

获得ULARGE_整数后,可以将其转换为货币,如下所示:

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)
' 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
要从货币遍历回ULARGE_整数:


int=vb6长32位,短16位整数。确保编译为32位操作系统目标,如果编译为64位,指针大小为64位SVB6无法编译为64位,因此如果DLL为64位,则无法从VB6使用它,因此我认为货币的东西不会工作…Thx SHR,但我仍然使用ULARGE_INTEGER执行错误的DLL调用约定