Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;将Sytem::String^转换为LPCOLESTR_String_Visual Studio 2008_C++ Cli_Converter - Fatal编程技术网

C++;将Sytem::String^转换为LPCOLESTR

C++;将Sytem::String^转换为LPCOLESTR,string,visual-studio-2008,c++-cli,converter,String,Visual Studio 2008,C++ Cli,Converter,我以混合模式(C++/CLI)编写,无法解决此问题: String ^progID = "Matrikon.OPC.Server"; CLSID clsid; HRESULT result = CLSIDFromProgID(progID, &clsid); 错误C2664:'CLSIDFromProgID':无法将参数1从'System::String^'转换为'LPCOLESTR' 如何将String^转换为LPCOLESTR? 谢谢 首先,让我们将System::String转换

我以混合模式(C++/CLI)编写,无法解决此问题:

String ^progID = "Matrikon.OPC.Server";
CLSID clsid;
HRESULT result = CLSIDFromProgID(progID, &clsid);
错误C2664:'CLSIDFromProgID':无法将参数1从'System::String^'转换为'LPCOLESTR'

如何将
String^
转换为
LPCOLESTR


谢谢

首先,让我们将System::String转换为char*

IntPtr p=Marshal::StringToHGlobalAnsi(progID);
char*pNewCharStr=static_cast(p.ToPointer())

其次,使用ATL转换宏将char*强制转换为LPCOLESTR:


LPCOLESTR转换的字符串=A2COLE(pNewCharStr)

首先,让我们将System::String转换为char*

IntPtr p=Marshal::StringToHGlobalAnsi(progID);
char*pNewCharStr=static_cast(p.ToPointer())

其次,使用ATL转换宏将char*强制转换为LPCOLESTR:


LPCOLESTR转换的字符串=A2COLE(pNewCharStr)

首先,让我们将System::String转换为char*

IntPtr p=Marshal::StringToHGlobalAnsi(progID);
char*pNewCharStr=static_cast(p.ToPointer())

其次,使用ATL转换宏将char*强制转换为LPCOLESTR:


LPCOLESTR转换的字符串=A2COLE(pNewCharStr)

首先,让我们将System::String转换为char*

IntPtr p=Marshal::StringToHGlobalAnsi(progID);
char*pNewCharStr=static_cast(p.ToPointer())

其次,使用ATL转换宏将char*强制转换为LPCOLESTR:


LPCOLESTR转换的字符串=A2COLE(pNewCharStr)

避免对每个钉子使用锤子。C++/CLI允许您同样轻松地使用本机类型。所以很简单:

LPCOLESTR progid = L"Matrikon.OPC.Server";
// etc..

您可以简单地使用Type::GetTypeFromProgID()。

避免对每个指甲都使用锤子,这不是零概率(总是说为什么)。C++/CLI允许您同样轻松地使用本机类型。所以很简单:

LPCOLESTR progid = L"Matrikon.OPC.Server";
// etc..

您可以简单地使用Type::GetTypeFromProgID()。

避免对每个指甲都使用锤子,这不是零概率(总是说为什么)。C++/CLI允许您同样轻松地使用本机类型。所以很简单:

LPCOLESTR progid = L"Matrikon.OPC.Server";
// etc..

您可以简单地使用Type::GetTypeFromProgID()。

避免对每个指甲都使用锤子,这不是零概率(总是说为什么)。C++/CLI允许您同样轻松地使用本机类型。所以很简单:

LPCOLESTR progid = L"Matrikon.OPC.Server";
// etc..

非零概率(总是说为什么)可以简单地使用Type::GetTypeFromProgID()。

我提出了另一种方法:

// 1.
pin_ptr<const WCHAR> str = PtrToStringChars(progID);
LPCOLESTR coleString = (LPWSTR)str; 

另一个例子:

// 3.
pin_ptr<const WCHAR> sclsid3 = PtrToStringChars("{63D5F432-CFE4-11d1-B2C8-0060083BA1FB}");
CLSID clsid3;
CLSIDFromString((WCHAR*)sclsid3, &clsid3); //(LPOLESTR, &CLSID)
//3。
pinptrsclsid3=PtrToStringChars({63D5F432-CFE4-11d1-B2C8-0060083BA1FB});
CLSID-clsid3;
CLSIDFromString((WCHAR*)sclsid3和clsid3)//(LPOLESTR和CLSID)

我没有太多的经验,也不确定是否内存不足,但我认为这些代码是正确的。

我用另一种方法:

// 1.
pin_ptr<const WCHAR> str = PtrToStringChars(progID);
LPCOLESTR coleString = (LPWSTR)str; 

另一个例子:

// 3.
pin_ptr<const WCHAR> sclsid3 = PtrToStringChars("{63D5F432-CFE4-11d1-B2C8-0060083BA1FB}");
CLSID clsid3;
CLSIDFromString((WCHAR*)sclsid3, &clsid3); //(LPOLESTR, &CLSID)
//3。
pinptrsclsid3=PtrToStringChars({63D5F432-CFE4-11d1-B2C8-0060083BA1FB});
CLSID-clsid3;
CLSIDFromString((WCHAR*)sclsid3和clsid3)//(LPOLESTR和CLSID)

我没有太多的经验,也不确定是否内存不足,但我认为这些代码是正确的。

我用另一种方法:

// 1.
pin_ptr<const WCHAR> str = PtrToStringChars(progID);
LPCOLESTR coleString = (LPWSTR)str; 

另一个例子:

// 3.
pin_ptr<const WCHAR> sclsid3 = PtrToStringChars("{63D5F432-CFE4-11d1-B2C8-0060083BA1FB}");
CLSID clsid3;
CLSIDFromString((WCHAR*)sclsid3, &clsid3); //(LPOLESTR, &CLSID)
//3。
pinptrsclsid3=PtrToStringChars({63D5F432-CFE4-11d1-B2C8-0060083BA1FB});
CLSID-clsid3;
CLSIDFromString((WCHAR*)sclsid3和clsid3)//(LPOLESTR和CLSID)

我没有太多的经验,也不确定是否内存不足,但我认为这些代码是正确的。

我用另一种方法:

// 1.
pin_ptr<const WCHAR> str = PtrToStringChars(progID);
LPCOLESTR coleString = (LPWSTR)str; 

另一个例子:

// 3.
pin_ptr<const WCHAR> sclsid3 = PtrToStringChars("{63D5F432-CFE4-11d1-B2C8-0060083BA1FB}");
CLSID clsid3;
CLSIDFromString((WCHAR*)sclsid3, &clsid3); //(LPOLESTR, &CLSID)
//3。
pinptrsclsid3=PtrToStringChars({63D5F432-CFE4-11d1-B2C8-0060083BA1FB});
CLSID-clsid3;
CLSIDFromString((WCHAR*)sclsid3和clsid3)//(LPOLESTR和CLSID)


我没有太多经验,也不确定是否存在内存不足,但我认为这些代码是正确的。

我用另一种方法:pin_ptr str=PtrToStringChars(progID);LPCOLESTR coleString=(LPWSTR)str@MarekK请将您的答案作为答案发布。这种技术通过将Unicode转换为ANSI再转换为Unicode来释放数据。我采用了另一种方法:pin_ptr str=PtrToStringChars(progID);LPCOLESTR coleString=(LPWSTR)str@MarekK请将您的答案作为答案发布。这种技术通过将Unicode转换为ANSI再转换为Unicode来释放数据。我采用了另一种方法:pin_ptr str=PtrToStringChars(progID);LPCOLESTR coleString=(LPWSTR)str@MarekK请将您的答案作为答案发布。这种技术通过将Unicode转换为ANSI再转换为Unicode来释放数据。我采用了另一种方法:pin_ptr str=PtrToStringChars(progID);LPCOLESTR coleString=(LPWSTR)str@MarekK请将您的答案作为答案发布。这种技术通过将Unicode转换为ANSI再转换为Unicode来释放数据。是的,但为了简化我的问题,我粘贴了代码的关键部分
L“Matrikon.OPC.Server”
将不被使用,并且
progID
将是动态的。因此,您的问题与您试图解决的问题不匹配,并且您选择的答案与您解决问题的方式不同。很好,我的问题与问题完全吻合。使用progID变量是有目的的<代码>字符串^progID=Console::ReadLine();CLSID-CLSID;HRESULT result=CLSIDFromProgID(progID,&clsid)这个匹配更好吗?我选择的答案是正确的,但在家里我并没有ATL快递。我会在周一上班的时候检查。我可以检查
char*pNewCharStr
是否正确。我在工作中试过ATL,我知道应该正确地进行转换。在此期间,我找到了不同的解决方法,因为我发现
OLESTR==WCHAR
。这是真的,但为了简化我的问题,我粘贴了代码的关键部分
L“Matrikon.OPC.Server”
将不被使用,并且
progID
将是动态的。因此,您的问题与您试图解决的问题不匹配,并且您选择的答案与您解决问题的方式不同。很好,我的问题与问题完全吻合。使用progID变量是有目的的<代码>字符串^progID=Conso