我从DLL获得了这个枚举和这个函数:
enum My_Enum {
enum1 = 0,
enum2 = !0,
};
typedef enum My_Enum My_Enum;
My_Enum myFunction(int arg);
每次我尝试从VBA Excel中调用它时崩溃。我知道这可能意味着类型错了,但我无法解决这个问题。
这是我的VBA代码:
Declare Function dll_myFunction Lib "C:\link_to_my_dll.dll" _
Alias "myFunction" (ByVal arg As Long) As Long
Private Sub Try_Calling()
Dim myArg As Long
myArg = 150
dll_myFunction myArg
End Sub
已经尝试将类型更改为Integer等。
答案 0 :(得分:0)
由于调用约定不匹配,可能VBA崩溃了? 我已经使用Visual Studio 2015制作了DLL示例,并成功地从我的Excel文档中调用了它。
这是我的DLL代码:
#include <Windows.h>
enum NumSign {
ns_undefined = 0,
ns_plus,
ns_minus,
};
__declspec(dllexport) NumSign __stdcall GetSign(int value) {
if(value > 0)
return ns_plus;
if(value < 0)
return ns_minus;
return ns_undefined;
}
这是我的VBA代码:
Private Declare Function GetSign Lib "DLL_declaration.dll" _
(ByVal value As Long) As Long
Sub DLL_call()
Dim myArg As Long
Dim retVal As Long
myArg = 150
retVal = GetSign(3)
MsgBox (retVal)
End Sub
你的错误是你还没有在C ++代码中指定__stdcall。 对我来说现在工作正常。