我使用以下函数编写一个64位编译的C dll:
中的.h:
_FF_EXPORT double __stdcall add(double a, double b);
<。>中的:
double __stdcall add(double a, double b)
{
return a+b;
}
然后我从VBA(也是64位)调用它:
Private Declare PtrSafe Function add Lib "sample.dll" (ByVal a As Double, ByVal b As Double) As Double
Public Sub addExcel()
On Error GoTo Err
Dim a As Double
Dim b As Double
Dim res as Double
a = 1
b = 2
res = add(a, b)
Err:
End Sub
当我在VisualStudio中调试我的dll时,我在手表中看到了 a = 0。,b = 2。
所以看起来'a'没有得到正确的价值。 如果不使用double,我使用int(在vba和dll中),我得到正确的值。 事实上,根据我使用的变量类型及其数量,有时我得到我想要的,有时是0。
这可能与我正在处理64位的事实有关吗? 还有其他想法吗?