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

问题描述 投票:0回答:1

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

vba excel-vba dll enums excel
1个回答
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。对我来说现在工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.