Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在由C++;_C++_Visual Studio 2010_Excel_Dll_Vba - Fatal编程技术网

C++ 在由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 .

我正在将一个函数从DLL导入Excel VBA。DLL是在微软Visual C++中创建的(默认示例中大部分未修改版本)。VB中函数调用的返回值不正确,但我不知道原因

我看到的值是0,但我希望得到42

我发现了一个几乎相同的问题。我尝试了他们的实验,在那里我从电子表格中调用了这个函数。我看到了相同的行为,电子表格返回是正确的,而vba代码中的返回不是正确的

< C++代码看起来是这样的:

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文件,但你知道的。