C# 如何用C编写调用C+的excel插件+;DLL导出函数
我想创建一个excel插件。 我有一些C++ DLL,它导出了在各个类中定义的函数。 我想在创建excel插件时使用这些函数 为此,我试图创建一个演示插件,simly计算简单的兴趣C# 如何用C编写调用C+的excel插件+;DLL导出函数,c#,c++,excel,plugins,dll,C#,C++,Excel,Plugins,Dll,我想创建一个excel插件。 我有一些C++ DLL,它导出了在各个类中定义的函数。 我想在创建excel插件时使用这些函数 为此,我试图创建一个演示插件,simly计算简单的兴趣 这是C++的DLL源文件。 //SimpleInterest.CPP #include <iostream> using namespace std; #include "CalSimpleInterest.h" namespace simpleInt { // total interest
这是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.dll。
现在,我想使用C#/C++中的CalSimplInterest()函数创建一个excel插件
我还搜索了各种备选方案来编写excel插件
我发现有很多方法可以做到这一点
< L> > P>创建一个C .xr包装器,它调用.NETUDFS中的非托管C++代码。
-NET Framework提供了带有Dllimport属性的PInvoke功能,允许托管应用程序调用非托管应用程序
DLL中打包的函数。
-它有速度、稳定性和技能等问题
如果我对这些方法中的任何一种有错误,请纠正我,并建议我可以使用其中的哪种方法。使用p/Invoke,您可以在C中创建一个类,该类将包装您的本机dll 一个技巧-在本机dll中,在外部“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#:
更多详细信息可以在中找到。使用p/Invoke,您可以在C#中创建一个类,该类封装您的本地dll 一个技巧-在本机dll中,在外部“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#:
<> >更多细节可以在.< /p> 中找到。如果您不使用.NET,否则,我不建议您将C++封装器添加到C++代码中。不清楚您是否从增加的复杂性中获益 如果你能支付一个解决方案,我建议你首先考虑-它是建立良好的,充分的特点和高度重视做你正试图做的事情。
否则,如果您熟悉Excel C SDK,您对现代C++风格感到满意,请看。他有很多例子,并实现了各种高级功能,所有的源代码都是在自由许可下实现的
<>最后,你提到的是可能的C++开源Excel插件的标准开源选项。 如果你不使用.NET,否则,我不建议你将C++的包装器添加到C++代码中。不清楚您是否从增加的复杂性中获益 如果你能支付一个解决方案,我建议你首先考虑-它是建立良好的,充分的特点和高度重视做你正试图做的事情。
否则,如果您熟悉Excel C SDK,您对现代C++风格感到满意,请看。他有很多例子,并实现了各种高级功能,所有的源代码都是在自由许可下实现的
<>最后,你提到的可能是C++ C++ Excel插件的标准开源选项。< /P>在Internet上搜索C++或CLI或P/INVINKE(平台调用)。在Internet上搜索C++/CLI或P/INVINKE(平台调用)。但是我的本机代码不是C风格。它们是C++ DLL中的类方法。所以,如何使用P/Invoke在C#中创建类,该类为此类本机dll打包。但我的本机代码不是C风格。它们是C++ DLL中的类方法。所以,如何使用P/Invoke在C#中创建类,该类为此类本机dll封装。
using System.Runtime.InteropServices;
class DllWrapper
{
[DllImport("CalSimpleInterest.dll")]
public static extern double CalSimplInterest(double Principal, double Rate, double Time);
}