2017-11-21 13 views
0

나는이 열거하고 DLL에서이 기능을 가지고 :전화 DLL (열거 형)

enum My_Enum { 
    enum1 = 0, 
    enum2 = !0, 
}; 
typedef enum My_Enum My_Enum; 

My_Enum myFunction(int arg); 

내가 VBA 엑셀 충돌에서 호출하려고 할 때마다. 아마 유형이 잘못되었다는 것을 알지만 이것을 고칠 수는 없습니다.

이 내 VBA 코드 :

답변

0

은 아마 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 

이미 정수로 유형을 변경하려고, 등? Visual Studio 2015를 사용하여 DLL 예제를 만들고 Excel 문서에서 성공적으로 호출했습니다.

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을 지정하지 않은 점이다

#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 코드 :

여기 내 DLL 코드입니다. 나를 위해 그것은 지금 잘 작동합니다.