怎么把 string^類型的變量轉化成lpctstr類型?


怎么把 string^類型的變量轉化成lpctstr類型?
CreateProcess(L"C:\\WINDOWS\\system32\\cmd.exe",this->textBox1->Text,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)
就是這個函數的第二個參數 需要lpctstr類型的變量,但是我想從this->textBox1->Text中獲得該字符串,而this->textBox1->Text的類型是string^的。
好像是與托管什么的有關

18 个解决方案

#2


string^是什么類型???

你工程用的UNICODE,那么 LPCTSTR 就是 const wchar_t *

#3


#include < vcclr.h >
    System::String ^ stringObject = sender->ToString();
    pin_ptr <const wchar_t> wszString = PtrToStringChars(stringObject);

#4


(putstr)

#5



String^ strTest = "Hello world\n";

LPCTSTR lpFileName = static_cast<LPCTSTR>(const_cast<void*>(static_cast<const void*>(System::Runtime::InteropServices::Marshal::StringToCoTaskMemUni(strTest))));

//使用完後加上這行釋放資源
System::Runtime::InteropServices::Marshal::FreeHGlobal(static_cast<IntPtr>(const_cast<void*>(static_cast<const void*>(lpFileName))));

#6


程式碼長了點,稍微修改。


using namespace System::Runtime::InteropServices;

String^ strTest = "Hello world\n";

LPCTSTR lpFileName = static_cast<LPCTSTR>(const_cast<void*>(static_cast<const void*>(Marshal::StringToCoTaskMemUni(strTest))));

//後面還要加上此行釋放
Marshal::FreeHGlobal(static_cast<IntPtr>(const_cast<void*>(static_cast<const void*>(lpFileName))));

#7


std::string   str;   
 LPCTSTR   lpstr   =   (LPCTSTR)str.c_str();

string str = "" 
mbstowcs( sz , str.c_str() , str.length() ); 

#8


LS,人家是dotnet 托管類string - -

#9


最簡單的方法,直接用CString(BSTR)的這個構造函數進行轉換

#10


看本版推薦

#11


最好是用DllImport將這個函數導入,而不是直接用windows.h

#12


lpctstr(string.c_str())

#13


char* CString2char(CString &str) 

int len = str.GetLength(); 
char* chRtn = (char*)malloc((len*2+1)*sizeof(char 
memset(chRtn, 0, 2*len+1); 
// USES_CONVERSION;  // 在.NET中
// strcpy_s((LPSTR)chRtn,2*len+1,OLE2A(str.LockBuffer())); // 在.NET中
strcpy((LPSTR)chRtn,str);//  VC6.0 中
return chRtn; 

#14


UP使用過也忘了,用的快忘的快,還是高人多。寬字符,什么的使用時候了解下,就好了。

#15


void MarshalStrings(System::String^ s, string& os)//格式轉換
 {
 using namespace Runtime::InteropServices;
 const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
 os = chars;
 Marshal::FreeHGlobal(IntPtr((void*)chars));

 }
void MarshalStrings(System::String ^ s, wstring& os )
 {
  using namespace Runtime::InteropServices;
  const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
  os = chars;
  Marshal::FreeHGlobal(IntPtr((void*)chars));
 }
這兩個分別對應普通的和寬字符的string轉換吧,我也是好不容易在網上找到的,很好用,我實驗過了,別忘了給我分啊

#16


怎么轉換?

#17


該回復於2012-04-27 13:07:42被版主刪除

#18


LPCTSTR pStr = CString(gcString);

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com