1

我正在使用 C++/CLI 创建一个控制外部 GPIB 设备的 GUI。GUI 有一个文本框,用户可以在其中输入电压。我可以像这样从文本框中读取电压...

String^ v1 = textBox1->Text;

假设用户在文本框中正确输入了一个十进制数,我需要将此值与其他一些文本连接起来,并生成一个const void*传递给 gpib 库命令的值。

所以基本上我的问题是如何转换String^const void*?我可以转换String^Double这样的...

Double volt1 = Double::Parse(textBox1->Text);

因此,如何将 a 转换为 a 的解决方案Doubleconst void*可以。

4

2 回答 2

1

奇怪的是,您的外部库const void*需要而不是字符指针,但假设它需要 ANSI 字符串,您可以使用marshal_context该类将您的指针转换String^const char*指针:

// marshal_context_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>

using namespace System;
using namespace msclr::interop;

int main() {
   marshal_context^ context = gcnew marshal_context();
   String^ message = gcnew String("Test String to Marshal");
   const char* result;
   result = context->marshal_as<const char*>( message );
   delete context;
   return 0;
}

(示例代码取自此处)。

当然,如果您的库想要一个 Unicode 字符串,您可以使用它marshal_as<const wchar_t*>

于 2015-06-19T21:32:01.537 回答
0

我能够通过以下方式解决我的问题...

String^ v1 = textbox->Text;
Double volt1 = Double::Parse(v1);
std::string vt1 = std::to_string(volt1);
vt1 = "Volt1 " + vt1;
const void* vtg1 = vt1.c_str();

可能不是解决问题的最有效方法,因为我正在将 a 转换String^Doublea std::stringconst void*但它确实解决了我的问题,我找不到更简单的方法,这可能是由于我缺乏 CLI 经验.

于 2015-06-21T04:18:58.260 回答