1

我想创建一个excel插件。我有一些 C++ DLL 导出在各种类中定义的一些函数。我想在创建excel插件时使用这些功能。

为此,我正在尝试创建一个简单计算单利的演示插件。

这是 C++ DLL 源文件下面。

//SimpleInterest.CPP
#include <iostream>
using namespace std;
#include "CalSimpleInterest.h"

namespace simpleInt
{
    // total interest 
    double calculateInterest:: CalSimplInterest(double Principal, double Rate, double Time)
    {
        double interest = 0.0;
        interest = (Principal * Time * Rate) / 100;
        return interest;
    }
}

类似的头文件

//CalSimpleInterest.h
namespace simpleInt
{
    class calculateInterest
    {
        public:
        static __declspec(dllexport) double CalSimplInterest(double Principal, double Rate, double Time);
    };
}

我已经遵守并创建了 CalSimpleInterest.dll 。现在我想在 C#/C++ 中使用 CalSimplInterest() 函数来创建一个 excel 插件。

我还搜索了各种替代方法来编写 excel 插件。

我发现有很多方法可以做到这一点。

  1. 制作一个 C# 包装器,从 .NET UDF 调用我们的非托管 C++ 代码。- .NET Framework 提供带有 Dllimport 属性的 PInvoke 功能,以允许托管应用程序调用打包在 DLL 中的非托管函数。- 它存在速度、稳定性和技能等问题。

  2. 微软 Excel SDK。- 但我在各种论坛上读到,这是一项繁琐且容易出错的任务,需要专业技能和经验。

  3. 我们可以使用尽可能少的第三方附加框架/工具包:

i) XLW ( http://xlw.sourceforge.net/ ),它是一个标准的开源 C/C++ 包装器。

ii) XLL+ 工具包隐藏了环境的复杂性,并允许程序员和设计师专注于他们的核心技能。

iii) 对于托管代码,或制作一个从 .NET UDF 调用非托管 C++ 代码的 C# 包装器,我们可以使用 Excel-DNA ( http://exceldna.codeplex.com )。

如果我对这些方法中的任何一个有错误,请纠正我,并建议我可以使用哪种方法。

4

2 回答 2

1

使用 P/Invoke,您可以在 C# 中创建包装原生 dll 的类。

一个提示 - 在您的本机 dll 中,在 extern "C"{...} 而不是类中实现函数,以避免在输出 dll 中出现名称错误。

本国的:

extern "C"
{
    static __declspec(dllexport) double CalSimplInterest(double Principal, double Rate, double Time)
    {
        double interest = 0.0;
        interest = (Principal * Time * Rate) / 100;
        return interest;
    }
}

C#:

using System.Runtime.InteropServices;

class DllWrapper
{
    [DllImport("CalSimpleInterest.dll")]
    public static extern double CalSimplInterest(double Principal, double Rate, double Time);
}

更多详细信息可以在http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx中找到。

于 2013-06-18T12:06:56.110 回答
0

如果您不使用 .NET,我不建议您在 C++ 代码中添加 C# 包装器。目前尚不清楚您是否从增加的复杂性中获得任何收益。

如果您有能力为解决方案付费,我建议您首先考虑使用Planatech XLL+ 工具包——它功能完善、功能齐全,并且因为您正在尝试做的事情而备受推崇。

否则,如果您熟悉 Excel C SDK 并且熟悉现代 C++ 风格,请查看Keith Lewis 的 xll 插件库。他有很多示例,并实现了各种高级功能,所有这些功能都具有自由许可下的源代码。

最后,您提到的XLW可能是制作 C++ Excel 插件的标准开源选项。

于 2013-06-24T21:24:42.807 回答