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

У меня есть два приложения:

1.: Приложение с графическим интерфейсом C#, написанное в VisualStudio 2013.

2.: Приложение с графическим интерфейсом C++, написанное в VisualStudio 2013.

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

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

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


person Fract    schedule 09.10.2016    source источник


Ответы (4)


Хммм... Есть способ сделать это (что я знаю):

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

person moien    schedule 09.10.2016

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

person shrike    schedule 09.10.2016

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

person AdmiralSmith    schedule 09.10.2016

Один из самых простых способов — выгрузить значения в файл на 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);
        }
    } }

Затем прочитайте его с помощью С++... (Источник здесь)

#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;
}
person SunsetQuest    schedule 10.10.2016