Использование родной C ++ dll с Windows Forms - PullRequest
0 голосов
/ 01 марта 2012

Я написал код на родном C ++ для вычислительно дорогого численного анализа, поэтому скорость программы является важным фактором.Я хотел бы разработать графический интерфейс для простого ввода вместо использования консольной версии.У меня очень мало опыта в разработке графического интерфейса, но Windows CMS для Visual C ++ кажется достаточно легким с графическим интерфейсом.Проблема заключается в том, что написание серверной части моего кода в управляемом CLR замедляет код в 3 раза, что, конечно, является большим фактором.Так что мне интересно, можно ли создать собственную dll из моего неуправляемого кода и включить ее в графический интерфейс, разработанный с помощью Windows Forms.В основном вычисления будут выполняться собственной библиотекой, которая будет обрабатывать вычисления, а интерфейс - это форма 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 голосов
/ 11 ноября 2015

Альтернативным решением является использование мастера приложений MFC. Он также имеет графический интерфейс перетаскивания. Мастер проведет вас через шаги по созданию базового графического интерфейса, а затем вы сможете добавить элементы управления в форму.

Если вы хотите использовать Windows Forms, ознакомьтесь с моим ответом на этот вопрос: Отсутствует пространство имен

0 голосов
/ 01 марта 2012

В прошлый раз, когда я работал с Windows Forms, у меня было чертовски много времени с использованием DLL. Вы можете включить их в свой проект и получить к ним доступ, но мой опыт работы не понравился. Это все, что я получил

[править] Я верю, что ответ на ваш вопрос - да, вы можете получить доступ к файлу DLL вашего собственного создания или еще чего-нибудь. И из того, что я знаю, это не должно быть определенным образом.

...