【发布时间】:2013-04-14 23:02:28
【问题描述】:
我使用 Visual C++ 2010 在 c++ 中构建了一个简单的 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);
}
}
Excel 宏:
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
【问题讨论】:
-
你在.def文件中声明了导出函数吗?
-
我没有 .def 文件。据我了解,使用 __deslspec(dllexport) 关键字消除了在 DEF 文件中列出函数的需要。
-
是的,但在任何情况下您都可以拥有 .defs 文件。也让你的所有功能都是静态的
-
我对Excel宏不太了解,但是参数列表中的ByRef看起来不对。我认为您应该改为传递您的论点 ByVal。
标签: c++ visual-studio-2010 excel dll