[VS 2005] c++, InteropServices::Marshal, nicht richtig

PeterBücherwurm

Grünschnabel
Ich habe ein Prob beim Konvertieren von String^ in LPCWSTR, ich wollte es wie folgt lösen, nur leider scheint es so, als würden dabei die ersten 2 Zeichen kaputtgehen, da das Label bei der Rückkonvertierung als erstes nur ein Kästchen zeigt und danach noch was falsches. Der Rest aber stimmt, weiß einer warum und was man da machen könnte?
Code:
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

in meinem Prog kommt dann folgender Code:

Code:
MeshPfad = (LPCWSTR) StringConvT(Meshsuchen->FileName);

String^ test = gcnew String(MeshPfad);
testlabel->Text = test;
 
Zuletzt bearbeitet:
Hallo,

wir haben das gleiche Problem wie du gehabt.

///
///Dieses Struct konvertiert den String* vom C#-Teil in einen wchar_t(UNICODE) der dann im
///unmanaged Code von uns genutzt werden kann
///
struct StringConvW
{
wchar_t* szUnicode;
StringConvW(System::String* s)
{
if ( !s )
s = "";
szUnicode = static_cast<wchar_t*> (System::Runtime::InteropServices::Marshal::StringToHGlobalUni(s).ToPointer());
}
~StringConvW()
{
System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szUnicode));
}
operator wchar_t*() const
{
return szUnicode;
}
};



std::wstring unicode = StringConvW(FileName);
wchar_t* fName = const_cast<wchar_t*>( unicode.c_str() );


Ich weiß nicht ob es dir hilft aber wir haben über diesen Weg den Fehler mit den Fehlenden chars am Anfang beheben können.
mfg
wensi
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück