String in const char* umwandeln....
-
1. Bist Du Dir bewusst dass System::String^ nicht C++ sondern C++/CLI (.NET) ist?
2. Wenn ja, bist Du Dir bewusst dass System::String^ ein managed Typ ist?
3. Wenn ja, bist Du Dir sicher dass Du Managed und Unmanaged Code mischen möchtest?
-
Ne, war mir leider nicht bewusst... Sorry
Also hab mir einfach mit VC++Express nen Fenster zusammengeklickt und wollte jetzt einfach den File-Namen den ich aus dem Dialog bekomme in einer Datei speichern... von .Net-Zusammenhängen usw. die plötzlich auftreten wusste ich nichts
-
-
danke für den link...
aber irgendwie finde da nicht das passende für mich
ich will ja einfach nur einen String^ in einen const char* umwandeln ...
MFC müsste ich doch eigentlich auch nutzen (theoretisch) oder? jedenfalls erkennt er CString auch nach erfolgreichem einbinden nicht
-
206RC++ schrieb:
aber irgendwie finde da nicht das passende für mich
Dann hast du den Link von Jochen nicht gelesen. Da steht genau das was du suchst. Das einzige was du noch machen musst, wäre std::string::c_str () aufrufen und schon hast du deinen const char*. Warum muss es den unbedingt const char* sein?
-
Unter dem angegebenen Link steht in einem Beitrag auch dass hier:
Jochen Kalmbach schrieb:
#include <windows.h> #include <tchar.h> using namespace System; struct StringConvA { char *szAnsi; StringConvA(System::String ^s) : szAnsi(static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer())) {} ~StringConvA() { System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szAnsi)); } operator LPCSTR() const { return szAnsi; } }; struct StringConvW { wchar_t *szUnicode; StringConvW(System::String^ s) : szUnicode(static_cast<wchar_t*>(System::Runtime::InteropServices::Marshal::StringToHGlobalUni(s).ToPointer())) {} ~StringConvW() { System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szUnicode)); } operator LPCWSTR() const { return szUnicode; } }; #ifdef _UNICODE #define StringConvT StringConvW #else #define StringConvT StringConvA #endif
Die Verwendung ist dann z.b: wie folgt:
int _tmain() { String ^s = "abc"; printf("%s", (LPCTSTR) StringConvA(s)); wprintf(L"%s", (LPCTSTR) StringConvW(s)); _tprintf(_T("%s"), (LPCTSTR) StringConvT(s)); }
Oder für std::string/wstring:
#include <string> int _tmain() { String ^s = "abc"; std::string ansi = StringConvA(s); std::wstring unicode = StringConvW(s); }
Und das ist genau das was du wolltest.
BR
Vinzenz
-
PuppetMaster2k schrieb:
Dann hast du den Link von Jochen nicht gelesen. Da steht genau das was du suchst. Das einzige was du noch machen musst, wäre std::string::c_str () aufrufen und schon hast du deinen const char*.
Naja, nicht ganz... das geht zwar auch aber ein std::string ist gar nicht nötig:
void Test(const char *pszStr); void ManagedFunc(String ^str) { Test(StringConvA(str)); }
tut's auch...
-
Ich hab nochmals ein besseres Beispiel in der FAQ gemacht:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-158664.html
-
juhu, es klappt.... die structs etc. mit eingebaut und dann lief es....
super, vielen Dank!achja....wollte noch fragen ob es möglich ist beliebige exe dateien aufzurufen.....
Mfg
-
206RC++ schrieb:
achja....wollte noch fragen ob es möglich ist beliebige exe dateien aufzurufen.....
System::Diagnostics::Process::Start