Witam,
Biblioteka DLL eksportuje taką oto funkcję:
extern "C" void __import __stdcall ReadValue(char *name, char **res, int *success);
Przykład użycia w C++ (działa ok):
int n;
char *res = new char[256];
ReadValue("1",&res,&n);
printf("Odczytano: %s\n\n",res);
.....
Próbuję teraz zaimportować ta funkcje w C#. Udalo mi sie zrobic tak, zeby kompilowalo sie bez bledu, ale wyswietla mi krzaki zamiast wyniku.
Robie tak:
[DllImport("shmem.dll")]
unsafe static extern void ReadValue(char[] name, char **res, int *success);
I użycie tego:
unsafe
{
int success;
char* res;
string s = "1";
char[] name = s.ToCharArray();
ReadValue(name, &res, &success);
MessageBox.Show(Convert.ToString(success));
MessageBox.Show(new string(res));
}
Okazuje się, że wartosc zmiennej success jest taka, jak powinna być. Jednak wyswietlenie zmiennej res to zawsze śmieci (drugi message box).
Co jest tutaj nie tak?
[edit]
Po zastanowieniu - powyzszy kod i w C++ wywalalby smieci. Kluczowa rzecz, to jak zaalokowac pamiec, bo w c++ mam tak:
char *res = new char[256];
Ale jak zaalokowac pamiec w bloku unsafe w C#? Jednym slowem, jaki bedzie odpowiednik tej instrukcji w C#?
Chyba ze w ogole nie tak wszystko robie, wiec prosze o wyjasnienie - w C# mam male doswiadczenie.