在Excel中使用C ++ 2010 dll

我使用Visual C ++ 2010在c ++中构build了一个简单的dll,并试图在excel中使用它。 项目名称为“SwapFunDLL”,源文件名称为“swapmain”,包含该类的头文件的名称及其函数为“DateNTime”。 我附在下面。 代码有两个值,然后使用类函数将它们相乘,然后返回产品(我意识到类和函数没有必要,即时通讯只是这样做的学习)。 该函数编译时没有错误,但是当在Excel中使用该函数我得到一个值错误。 有人可以帮我看看我做什么错误的感谢。

标题:

// DateNTime.h //Avoid need of .Def file #ifdef SwapFunDLL_EXPORTS #define SwapFunDLL_API __declspec(dllexport) #else #define SwapFunDLL_API __declspec(dllimport) #endif namespace DateNTime { class SwapFunDLL_API Date { double x,y; public: double datediff(double,double); }; double Date::datediff(double x, double y) { return x*y; } } 

源文件:

 #include "DateNTime.h" namespace DateNTime { double returndates(double a, double b) { Date Date; return Date.datediff(a,b); } } 

Excelmacros:

Declare Function SwapFunDLL _ Lib "C:\Users\MIKE\Desktop\c++ tial programs\SwapFunDLL\Debug\SwapFunDLL.dll" _ (ByRef x As Double, ByRef y As Double) As Double

你的import声明是错误的。 两件事:types的语义和声明。 如果你使用比Excel中的指针你说的ByRef ,但如果你使用值传递你说ByVal 。 声明这个函数为:

 Declare Function returndates Lib "C:\Users\MIKE\Desktop\c++ tial programs\SwapFunDLL\Debug\SwapFunDLL.dll" _ (ByVal x As Double, ByVal y As Double) As Double 

使你的函数返回你正在输出的类的成员,静态成员。 也让你的函数是静态的,在任何情况下你都可以在.def文件中声明这个输出(简单地说就是:“returneddates”)。 所有这一切都必须工作,除非你的C ++代码是确定的。 也在这里:

  double returndates(double a, double b) { Date Date; //<- change it, ie: Date d; d.datediff(); does it compile? return Date.datediff(a,b); } 

你可以改变代码来testing你是否正确地处理这样的“testing信息”表单:

  double returndates(double a, double b) { return 117; } 

并在Excel中尝试。 Excel需要__stdcall ,所以在你的类里面做一个函数声明:

 static double __stdcall returndates(double a, double b); 

然后在.cpp文件中将其定义为:

  SwapFunDLL_API double __stdcall DateNTime::Date::returndtes(double a, double b){ return 117; } 

毕竟这些改变应该是可以的。