如何将浮点数从 C# 应用程序发送到 C++ 应用程序?

Posted

技术标签:

【中文标题】如何将浮点数从 C# 应用程序发送到 C++ 应用程序?【英文标题】:How to send float numbers from a C# application to a C++ application? 【发布时间】:2016-10-09 16:38:18 【问题描述】:

我有两个应用程序:

1.:用 VisualStudio 2013 编写的 C# GUI 应用程序。

2.:用 VisualStudio 2013 编写的 C++ GUI 应用程序。

我想将浮点数从应用程序 #1 发送到应用程序 #2。

(换句话说:如果 C# 应用程序计算一个浮点数(例如:12.32),那么我希望在 C++ 应用程序编写的标准输出中看到这个数字。)

实现此目的最简单的方法是什么?是否有任何 Windows API 或 common-memory-address-thing 等来完成此操作?

【问题讨论】:

【参考方案1】:

嗯...有一些方法可以做到(据我所知):

使用套接字 使用Shared Memory 使用读写文件 使用 P\Invoke 到 Change Controls Text 使用IPC Channels

如果我想在 GUI 应用程序上执行此操作,我会选择 P\Invoke,但如果我想做一些后台操作,我会选择 IPC 通道或共享内存(IPC 通道更好)

【讨论】:

【参考方案2】:

您可以使用任何类型的进程间通信机制来做到这一点。最简单的可能是匿名管道。您将了解如何在 C++ 中使用匿名管道 here 和在 C# 中使用 there。

【讨论】:

【参考方案3】:

我假设两个应用程序同时运行。我会使用套接字进行本地传输,或者我假设 c++ 应用程序只是从 C# 应用程序中捕获数据,因此您可以将其作为数据对象返回并将其作为参数传递给生成的 C++ 应用程序。

【讨论】:

【参考方案4】:

最简单的方法之一是将值转储到 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;

【讨论】:

以上是关于如何将浮点数从 C# 应用程序发送到 C++ 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 将浮点数保存并加载到二进制文件中,由指针寻址

使用命名管道将图像从 C++ 发送到 C# 应用程序

如何将浮点数转换为长度为 4 的字节数组(char* 数组)?

如何将浮点数保存为 2 个字节?

将浮点数转换为字符串[重复]

C# - 将浮点数转换为整数...并根据余数更改整数