用指针调用C ++ DLL函数

时间:2019-07-18 16:27:53

标签: c++ vba ms-access

尝试从VBA(MS Access)调用C ++ DLL并不断出现“错误的dll调用约定”错误,以及MS Access崩溃。

这是我要调用的C ++ API函数:

_IMPORT HRESULT _CONVENTION PCRSNewTrip (Trip *pTripID);

“旅行”的定义为:

typedef long Trip;

通过API标头:

#if defined (__BORLANDC__) 
#define  _IMPORT __declspec( dllimport )
#define  _CONVENTION __stdcall
#elif defined (_MSC_VER)
#define  _IMPORT _declspec( dllimport )
#define  _CONVENTION _cdecl
#endif

有关此功能的一些信息: PCRSNewTrip()将新行程的句柄放置在传入的(tripID)的指针参数中。返回代码与所有其他DLL函数(用于错误处理)相同。

这是我最近一次调用该函数的尝试:

Public Declare Function PCRSNewTrip Lib "C:\xxx\pcrsrv32.dll" Alias "_PCRSNewTrip" (ByRef myTripPtr As Long) As Long

Private Sub NewTrip_Click()

Dim myTrip As Long
Dim myTripPtr As Long

myTripPtr = VarPtr(myTrip)

myTrip = PCRSNewTrip(myTripPtr)

EndSub

我收到“错误的DLL调用约定”错误。

1 个答案:

答案 0 :(得分:1)

猜测这是条件编译标头代码的“实时”分支:

#elif defined (_MSC_VER)
#define  _IMPORT _declspec( dllimport )
#define  _CONVENTION _cdecl
#endif
Windows上的VBA不支持

_cdecl。您需要使用使用__stdcall的DLL构建。