VBA 64位Excel不传递指向DLL函数的指针(C ++)

我有VBA程序运行在Excel 64位调用一些DLL函数(C ++)。 问题是(显然)它不能传递指向C ++程序的指针。 该程序与Excel 32位的工作。操作系统是Windows 8 。 对于Windows 7,Excel的32位和64位版本都运行良好。

C ++:

double test(long* v, long i) { if (v == NULL) return -88; else return *((long*)v); } 

VBA:

 Private Declare PtrSafe Function hamid_test Lib "...\CVode.dll" (ByVal v As LongPtr, ByVal i As Long) As Double Dim x As LongLong Dim z As Double z = test(x, 1) 

它返回-88

 Dim x As LongPtr Dim z As Double z = test(x, CLng(1)) 

LongPtr在32位环境中评估为Long ,在64位环境中评估为LongLong ,因此定义x应该可行。

另外, CLng将确保1被评估为一个Long类型。 如果没有添加,VBA将假定你的意思是Integer