gpt4 book ai didi

c++ - 在 excel 中使用 C++ 2010 dll

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:17 25 4
gpt4 key购买 nike

我使用 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 宏:

声明函数 SwapFunDLL _
库“C:\Users\MIKE\Desktop\c++ tial programs\SwapFunDLL\Debug\SwapFunDLL.dll”_
(ByRef x As Double, ByRef y As Double) As Double

最佳答案

您的进口申报有误。两件事:类型的语义和声明。如果你使用指针而不是在 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 文件中声明此导出(只是简单地说:“returdates”就是全部)。毕竟这必须工作,除非你的 C++ 代码是好的。也在这里:

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

您可以更改代码只是为了测试您是否正确地按照这种“测试信息”形式做了所有事情:

   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;
}

完成所有这些更改后应该就可以了。

关于c++ - 在 excel 中使用 C++ 2010 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com