C++ 在由C++;
我正在将一个函数从DLL导入Excel VBA。DLL是在微软Visual C++中创建的(默认示例中大部分未修改版本)。VB中函数调用的返回值不正确,但我不知道原因 我看到的值是0,但我希望得到42 我发现了一个几乎相同的问题。我尝试了他们的实验,在那里我从电子表格中调用了这个函数。我看到了相同的行为,电子表格返回是正确的,而vba代码中的返回不是正确的 < C++代码看起来是这样的:C++ 在由C++;,c++,visual-studio-2010,excel,dll,vba,C++,Visual Studio 2010,Excel,Dll,Vba,我正在将一个函数从DLL导入Excel VBA。DLL是在微软Visual C++中创建的(默认示例中大部分未修改版本)。VB中函数调用的返回值不正确,但我不知道原因 我看到的值是0,但我希望得到42 我发现了一个几乎相同的问题。我尝试了他们的实验,在那里我从电子表格中调用了这个函数。我看到了相同的行为,电子表格返回是正确的,而vba代码中的返回不是正确的 < C++代码看起来是这样的: Declare Function fnaddnum _ Lib " ... path to dll .
Declare Function fnaddnum _
Lib " ... path to dll ... " _
() As Integer
Sub use_dll()
Dim return_val As Integer
return_val = fnaddnum()
MsgBox ("Value is" & Str(return_var))
End Sub
addnum.h
#ifdef ADDNUM_EXPORTS
#define ADDNUM_API __declspec(dllexport)
#else
#define ADDNUM_API __declspec(dllimport)
#endif
extern "C" {
ADDNUM_API int fnaddnum(void);
}
addnum.cpp
#include "stdafx.h"
#include "addnum.h
ADDNUM_API int fnaddnum(void)
{
return 42;
}
VB代码如下所示:
Declare Function fnaddnum _
Lib " ... path to dll ... " _
() As Integer
Sub use_dll()
Dim return_val As Integer
return_val = fnaddnum()
MsgBox ("Value is" & Str(return_var))
End Sub
问题是我有一个打字错误。我引用的是“return\u var”而不是“return\u val”。实际上,dll函数引用返回的值是正确的。调用约定不匹配。VBA是STDCALL,C++代码是CDECL。@戴维HFEFMAN是的,这是根本问题。因为,我必须使用stdcall,所以我不能使用u declspec(dllimport)。因为我没有使用u declspec(dllimport),所以我需要一个def文件。您可以将dllexport与stdcall一起使用。很抱歉,这是不真实的。我的意思是,自从我开始工作以来,我还没有让VBA接受带有dllexport和stdcall的dll。因为这可能是我的错误,我不能正确地得出结论,在这种情况下,它们不能一起使用。我很高兴我现在能找到工作。谢谢。你只需要用这个装饰过的名字。或者def文件,但你知道的。