如何在C#中编写调用C ++ DLL导出函数的excel插件

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

为此,我试图创build一个演示插件,模拟计算简单的兴趣。

这是低于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); }; } 

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

我也search了各种替代方法来编写excel插件。

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

  1. 制作一个C#包装器,从.NET UDF调用我们的非托pipeC ++代码。 .NET Framework提供了带Dllimport属性的PInvokefunction,以允许托pipe应用程序调用封装在DLL中的非托pipe函数。 它有速度,稳定性和技巧等问题。

  2. Microsoft Excel SDK。 – 但是我已经在各种论坛上看到,这是一个繁琐而容易出错的任务,需要专门的技能和经验。

  3. 我们可以使用第三方额外的框架/工具包:

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

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

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

请纠正我,如果我对这些方法的任何错误,并build议我可以使用这些方法。

使用P / Invoke,你可以在C#中创build包装你的本地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中find&#x3002;

如果你不使用.NET,否则我不build议你添加一个C#包装到你的C ++代码中。 目前还不清楚,从增加的复杂性中获得什么。

如果您能够为解决scheme付费,我build议您首先考虑Planatech XLL +工具包 – 它已经完善,function齐全,并且非常重视您正在做的事情。

否则,如果您对Excel C SDK有一定的了解,并且熟悉现代C ++风格,请查看Keith Lewis的xll插件库 。 他有很多的例子,并实施了各种先进的function,所有的自由许可下的源代码。

最后,您提到的XLW可能是用于制作C ++ Excel加载项的标准开源选项。

Interesting Posts