Zmienna w MD5 C++

0

Witam, mam mały problem korzystam z MD5 (http://bobobobo.wordpress.com/2010/10/17/md5-c-implementation/) i wszystko działa dobrze do momentu kiedy wstawiam zmienną:

String^ haslo1 = gcnew String("fe546279a62683de8ca334b673420696");
String^ haslo2 = gcnew String(md5.digestString(this->Haslo->Text)); // <-- W tym miejscu
					 
 if(haslo1 ==  haslo2) { MessageBox::Show("Poprawne hasło" , "Program" , MessageBoxButtons::OK, MessageBoxIcon::Information);	 }

Wyskakuje mi taki błąd:

 Error	3	error C2664: 'MD5::digestString' : cannot convert parameter 1 from 'System::String ^' to 'char *'

próbowałem już wszystkiego...
Proszę o rozwiązanie tego problemu ;)

0

musisz skonwertować String^ na char*:

using System::Runtime::InteropServices::Marshal; // gdzies na gorze

char *cstring = (char*)Marshal::StringToHGlobalAnsi(TwojStringZDaszkiem);

Marshal::FreeHGlobal(cstring);     // i gdzies dalej zwalniasz pamiec
0

Dzięki !

0

alternatywne rozwiązanie z marshal.h (wymaga VS 2010):

#include <msclr\marshal.h>

using namespace System;

int main() {
   msclr::interop::marshal_context context;
   String^ napis = "ala ma kota";
   const char* cstring = context.marshal_as<const char*>(napis);
}

Zaletą jest że nie trzeba pamiętać o zwalnianiu: cstring ulegnie zwolnieniu automatycznie gdy context wyleci z zasięgu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1