2016-10-09 10 views
0

У меня есть два приложения:Как отправить числа с плавающей точкой из приложения C# в приложение C++?

1 .: C# приложение GUI, написанные в VisualStudio 2013.

2 .: C++ GUI приложение написано в VisualStudio 2013.

Я хотел бы отправить номера с плавающей точкой из приложения № 1 к приложению № 2.

(Другими словами:. Если C# приложение вычисляет число с плавающей запятой (например:. 12.32), то я хотел бы видеть этот номер на стандартный вывод, написанного приложения C++)

Что является самым простым способ сделать это? Есть ли какой-либо Windows API, или общая память-адрес, и т. Д., Чтобы выполнить это?

ответ

2

Хммм ... Там какой-то способ, чтобы сделать это (то, что я знаю):

  • Использование сокетов
  • Использование Shared Memory
  • Использование Чтение Запись файлов
  • Использование P \ Invoke в Change Controls Text
  • Использование IPC Channels

Если я хочу сделать это в GUI Applcation, я выберу P \ Invoke, но если я хочу что-то сделать, я выберу IPC-каналы или общую память (лучше IPC-каналы)

2

Вы можете сделать это, используя любой вид механизм межпроцессного взаимодействия. Самыми простыми могут быть анонимные трубы. Вы найдете, как использовать анонимные каналы here в C++ и there в C#.

1

Я предполагаю, что оба приложения работают одновременно. Я бы сделал локальный перенос с использованием сокетов, или я предполагаю, что приложение C++ просто ловит данные из приложения C#, чтобы вы могли вернуть его в качестве объекта данных и передать это в нерестовое приложение C++ в качестве аргумента.

1

Один из самых простых способов - сбросить значения в файл на C#, а затем забрать их на C++.

примечание: этот метод не является самым надежным/быстрым и может быть не лучшим для корпоративного продукта, но для быстрой однократной необходимости это должно работать нормально.

Сохранить вывод в файл ...

using System.IO; 

class ConsoleApplication { 
    static void Main() 
    { 
     using (BinaryWriter writer = new BinaryWriter(File.Open("temp.dat", FileMode.Create))) 
     { 
      writer.Write(1.2345F); 
     } 
    } } 

Затем прочитать его в C++ ... (Source is here)

#include <iostream> 

int main(void) 
{ 
    FILE *r_file = NULL; 
    float fd_value = 0; 

    r_file = fopen("temp.dat", "rb"); 
    if (NULL == r_file) 
     return 0; 

    fread(&fd_value, 1, sizeof(fd_value), r_file); 
    fclose(r_file); 


    printf("fd_value = %f\n", fd_value); 
    return 0; 
}