Visual c++ 在C+中将字符串转换为常量void*+;

Visual c++ 在C+中将字符串转换为常量void*+;,visual-c++,textbox,c++-cli,gpib,Visual C++,Textbox,C++ Cli,Gpib,我正在使用C++/CLI创建一个控制外部GPIB设备的GUI。GUI有一个文本框,用户可以在其中输入电压。我可以像这样从文本框中读取电压 String^ v1 = textBox1->Text; Double volt1 = Double::Parse(textBox1->Text); 假设用户正确地在文本框中输入了一个十进制数,我需要将该值与其他一些文本连接起来,并生成一个const void*以传递给gpib库命令 因此,基本上我的问题是如何将String^转换为const

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

String^ v1 = textBox1->Text;
Double volt1 = Double::Parse(textBox1->Text);
假设用户正确地在文本框中输入了一个十进制数,我需要将该值与其他一些文本连接起来,并生成一个
const void*
以传递给gpib库命令

因此,基本上我的问题是如何将
String^
转换为
const void*
?我可以像这样将
String^
转换成
Double

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

因此,如何将
Double
转换为
const void*
的解决方案也可以使用。

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

// 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;
}
//marshal\u context\u test.cpp
//使用:/clr编译
#包括
#包括
#包括
使用名称空间系统;
使用名称空间msclr::interop;
int main(){
封送上下文^context=gcnew封送上下文();
字符串^message=gcnew字符串(“要封送的测试字符串”);
常量字符*结果;
结果=上下文->封送(消息);
删除上下文;
返回0;
}
(示例代码取自)


当然,如果您的库需要Unicode字符串,您可以使用
封送作为

我可以通过以下方法解决我的问题

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();

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

const void*没有足够的信息来回答这个问题。它必须指向的数据的形式是什么?为什么要动态地分配一个
封送上下文
?@BenVoigt不知道,代码是从msdn上的链接页面逐字输入的。