c# - 将 char[] 从 C++/CLR 返回到 C#
问题描述
我在 Visual Studio 的一个解决方案中有 2 个项目,一个在 C++ 中与某些硬件通信,一个在 C# 中,构建 GUI 等。
在我的 .cpp 中,我有一些有效的功能:
namespace ISCOPumpLibrary {
char data[512];
bool ISCOPump::Connect(char unit, int com, long baud) {
commport = com;
speed = baud;
unitnum = unit;
connected = commOpen(commport, speed);
return connected;
}
bool ISCOPump::GetInfo() {
char in[512], out[512];
in[0] = 'G';
Execute(in, out);
strcpy_s(data, out);
return true;
}
使用 .h 文件,例如:
namespace ISCOPumpLibrary {
public ref class ISCOPump
{
public:
static bool Connect(char unit, int com, long baud);
static bool GetInfo();
这些在 C# 程序中调用如下:
private void Button_GetInfo_Click(object sender, EventArgs e)
{
bool connected = ISCOPumpLibrary.ISCOPump.Connect(7, 7, 19200);
bool info = ISCOPumpLibrary.ISCOPump.GetInfo();
//label_serial.Text += "\r\n" + info;
}
这一切似乎都奏效了。我遇到的问题是我似乎无法找到一种真正有效的方法来返回char data[512]
或char out[512]
我浏览了一堆答案,但找不到与我的情况相似的答案,大多数人似乎对这些事情的称呼略有不同。
我尝试过使用std::string
或有一个论点char*
,并且没有任何运气让 C# 喜欢其中任何一个。
关于我应该如何让它工作的任何想法?
解决方案 标题:
namespace ISCOPumpLibrary {
using namespace System::Runtime::InteropServices;
using namespace System;
public ref class ISCOPump
{
public:
// ISCO Implemented functions.
//returns success bool
static bool Connect(char unit, int com, long baud);
//returns string of info
static bool GetInfo([Out]String^ %c);
cp:
namespace ISCOPumpLibrary {
bool ISCOPump::Connect(char unit, int com, long baud) {
commport = com;
speed = baud;
unitnum = unit;
connected = commOpen(commport, speed);
return connected;
}
bool ISCOPump::GetInfo([Out]String^ %c) {
char in[512], out[512];
in[0] = 'G';
Execute(in, out);
c = gcnew String(out);
return true;
}
CS:
private void Button_Connect_Click(object sender, EventArgs e)
{
bool connected = ISCOPumpLibrary.ISCOPump.Connect(7, 7, 19200);
ISCOPumpLibrary.ISCOPump.GetInfo(out string data);
label_serial.Text += "\r\n" + data;
}
请注意,其中一个关键细节是标头中的 using 命名空间系统调用必须在类中,以防止各种冲突。
解决方案
推荐阅读
- java - 如何使用 Mockito 使单元测试通过?
- elasticsearch - Elasticsearch 聚合 min-max 给出“illegal_argument_exception”
- java - 如何找到包含在 JSON 中的内容
- mysql - 在 SQL 中查找每个司机一个月内的平均预订评分
- node.js - 如何在 2 个节点 js 服务器或节点 js 服务器和 tomcat 之间设置 2 路 SSL
- node.js - 杀死不断重启的Windows进程
- python - 如何删除 Windows 远程服务器上的文件?
- powershell - 使用 powershell 安装 Sharepoint 2016
- excel - 将命名范围数据从一个工作簿移动到另一个工作簿
- java - 如何按数字和单词组拆分文本