如何将浮点数从 C# 应用程序发送到 C++ 应用程序?
How to send float numbers from a C# application to a C++ application?
我有两个申请:
1.: 在 VisualStudio 2013 中编写的 C# GUI 应用程序。
2.: 在 VisualStudio 2013 中编写的 C++ GUI 应用程序。
我想将浮点数从应用程序 #1 发送到应用程序 #2。
(换句话说:如果 C# 应用程序计算浮点数(例如:12.32),那么我希望在 C++ 应用程序编写的标准输出中看到这个数字。)
完成此任务最简单的方法是什么?是否有任何 Windows API 或公共内存地址等来完成此操作?
嗯...有一些方法可以做到(我所知道的):
- 使用套接字
- 使用Shared Memory
- 使用读写文件
- 使用 P\Invoke 到 Change Controls Text
- 使用IPC Channels
如果我想在 GUI 应用程序上执行此操作,我会选择 P\Invoke 但如果我想做一些背景操作,我会选择 IPC 通道或共享内存(IPC 通道更好)
您可以使用任何一种进程间通信机制来完成此操作。最简单的可能是匿名管道。您将了解如何在 C# 中使用匿名管道 here in C++ and there。
我假设这两个应用程序同时 运行。我会使用套接字进行本地传输,或者我假设 C++ 应用程序只是从 C# 应用程序捕获数据,因此您可以 return 它作为数据对象并将其作为参数传递给生成的 C++ 应用程序。
最简单的方法之一是在 C# 中将值转储到一个文件中,然后在 C++ 中提取它们。
注意:此方法不是最有效的 reliable/fastest 并且可能不是企业产品的最佳方法,但对于快速的一次性需求,此方法应该可以正常工作。
将输出保存到文件...
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;
}
我有两个申请:
1.: 在 VisualStudio 2013 中编写的 C# GUI 应用程序。
2.: 在 VisualStudio 2013 中编写的 C++ GUI 应用程序。
我想将浮点数从应用程序 #1 发送到应用程序 #2。
(换句话说:如果 C# 应用程序计算浮点数(例如:12.32),那么我希望在 C++ 应用程序编写的标准输出中看到这个数字。)
完成此任务最简单的方法是什么?是否有任何 Windows API 或公共内存地址等来完成此操作?
嗯...有一些方法可以做到(我所知道的):
- 使用套接字
- 使用Shared Memory
- 使用读写文件
- 使用 P\Invoke 到 Change Controls Text
- 使用IPC Channels
如果我想在 GUI 应用程序上执行此操作,我会选择 P\Invoke 但如果我想做一些背景操作,我会选择 IPC 通道或共享内存(IPC 通道更好)
您可以使用任何一种进程间通信机制来完成此操作。最简单的可能是匿名管道。您将了解如何在 C# 中使用匿名管道 here in C++ and there。
我假设这两个应用程序同时 运行。我会使用套接字进行本地传输,或者我假设 C++ 应用程序只是从 C# 应用程序捕获数据,因此您可以 return 它作为数据对象并将其作为参数传递给生成的 C++ 应用程序。
最简单的方法之一是在 C# 中将值转储到一个文件中,然后在 C++ 中提取它们。
注意:此方法不是最有效的 reliable/fastest 并且可能不是企业产品的最佳方法,但对于快速的一次性需求,此方法应该可以正常工作。
将输出保存到文件...
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;
}