在Windows窗体中使用本机C ++ DLL

时间:2012-03-01 05:35:59

标签: windows forms dll native

我用原生C ++编写了一个代码,用于计算成本高昂的数值分析,因此程序速度是一个重要因素。我想开发一个简单输入的GUI,而不是使用控制台版本。我对GUI开发的经验很少,但Visual C ++ Windows Forms看起来很简单,它是图形界面。问题是在托管CLR中编写代码的后端会使代码减慢3倍,这当然是一个重要因素。所以我想知道是否有可能从我的非托管代码创建一个本机DLL并将其包含在使用Windows Forms开发的GUI中。基本上,计算将由本机库处理计算完成,前端是使用托管代码创建的Windows表单。这样,速度因子不会改变  我想我应该能做到这一点。但是,我没有在网上找到太多信息,如所涉及的步骤和正确的语法(我对Visual Studio不太好,我通常使用GCC来编译我的代码)。 以下是一个解决二次方程的C ++类示例。我想这些显而易见的问题,dll是否必须以某种方式构建,如何将其包含在项目中,如何将参数传递给dll并调用函数......

#include <cmath>

using namespace std;

class QuadraticEquation  // ax^2+bx+c=0
{
 public:
QuadraticEquation();
void set(double A, double B, double C); //mutator function
void solve();
double get1stRoot(); //accessor function for first solution
double get2ndRoot(); //accessor function for second solution
 private:
double a; 
double b;
double c;
double x1; // first solution
double x2; // second solution
 };

 QuadraticEquation::QuadraticEquation()
 {
a = 0, b = 0, c = 0, x1 = 0, x2 = 0;
 }


 void QuadraticEquation::set(double A, double B, double C)
 {
a = A, b = B, c = C;
 }


 void QuadraticEquation::solve() // member function to solve the equation
 {
double D = pow(b, 2.0) - 4 * a * c;
if(D>=0) // only then we get real solutions and not imginary ones
    x1 = (-b + sqrt(D)) / (2*a), x1 = (-b - sqrt(D)) / (2*a);
 }

 double QuadraticEquation::get1stRoot()
 {
return x1;
 }

 double QuadraticEquation::get2ndRoot()
 {
return x2;
 }

提前致谢

2 个答案:

答案 0 :(得分:0)

上次我使用Windows Forms时,我有一段时间使用dll的。您可以将它们包含在项目中并访问它们,但我这样做的经验并不令人愉快。这就是我得到的全部

[编辑] 我相信你的问题的答案是肯定的,你可以访问自己创建的dll文件或诸如此类的东西。而据我所知,它不必以某种方式构建。

答案 1 :(得分:0)

另一种解决方案是使用MFC应用程序向导。它也有一个拖放GUI。该向导将引导您完成创建基本GUI的步骤,然后您可以向表单添加控件。

如果您想使用Windows窗体,请查看我对此问题的回答: Missing Namespace