在Excel中调用来自VBA的DLL(枚举类型)

时间:2017-11-21 09:59:07

标签: vba excel-vba dll enums excel

我从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等。

1 个答案:

答案 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。 对我来说现在工作正常。