Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Вызов и подключение программы на c++ из c#

#c_sharp #cpp


Есть программа на c++, которая генерирует зашифрованное сообщение и выводит в файл
и консоль.
Программа на c# должна эти данные выводить на winforms. Как их вообще связать? Т.е.
вызвать шифратор сообщения на с++ из c#, подождать пока она посчитает и выведет данные,
а затем на с# в winforms выведет ответ?
    


Ответы

Ответ 1



Лучше переделать программу на C++ в dll, подключить его и из C# вызать соответствующий метод. C++ Запускаем Visual Studio .NET. Создаём новый проект File->New->Project. Выбираем Visual C++ Project, На вкладке Templates->Visual C++, Выбираем “Win32 Project”. Выбираем имя для проекта, например TestLib. Нажимаем OK. В следующей форме выбираем Application Type: DLL и Empty Project. Добавим в "Source File" New Item->C++ File. Добавим код #include extern "C" { double __declspec(dllexport) Add (double a, double b) { return a + b; } } Компилируем. C# using System.Runtime.InteropServices; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("TestLib.dll", CallingConvention = CallingConvention.Cdecl)] public static extern double Add(double a, double b); private void button1_Click(object sender, EventArgs e) { var x = Add(25, 17); MessageBox.Show(x.ToString()); } } }

Ответ 2



Есть вариант запустить консольное приложение из C# и считать вывод. Process p = new Process(); p.StartInfo.UseShellExecute = false; // Перехватываем вывод p.StartInfo.RedirectStandardOutput = true; // Запускаемое приложение p.StartInfo.FileName = "example.exe"; // Передаем необходимые аргументы // p.Arguments = "example.txt"; p.Start(); // Результат работы консольного приложения string output = p.StandardOutput.ReadToEnd(); // Дождаться завершения запущенного приложения p.WaitForExit(); Информация взята из MSDN и ответов.

Комментариев нет:

Отправить комментарий