Mam taki upierdliwy problem: jak wyrzucić obrobiony string z mojego dll do MQL bez wywalenia tego drugiego lub pisania do obszaru pamięci którym nikt tak naprawdę nie zarządza?
Np w dll:
Kod: Zaznacz cały
MT4_EXPFUNC char* __stdcall mojString(char* input1, char* input2)
{
char *test;
strcpy(test, input);
strcat(test, input2);
return test;
}
Kod: Zaznacz cały
Print (mojString("poniedzialek|", "_______wtorek"));
Teoretycznie mógłbym alokować ją w kodzie dll ale to jest błąd, bo po wykonaniu kodu taki obszar staje się śmieciem? Teraz też to wygląda na śmieć, tyle że istniejący w wolnej przestrzeni... zgadza się?
W zasadzie powinienem chyba podać wyjście jako parametr. Wtedy MQL alokuje pamięć i teoretycznie wszystko powinno być ok. Ale nie działa tak jakbym się spodziewał:
Np. dll:
Kod: Zaznacz cały
MT4_EXPFUNC void __stdcall mojString(char* input, char* input2, char* output)
{
char *test;
strcpy(test, input);
strcat(test, input2);
strcpy(output, test);
}
Kod: Zaznacz cały
string output =" ";
mojString("poniedzialek|", "_______wtorek", output); // tak, tak, string& output w imporcie... jedyna forma wskaźnika w MQL ;-)
Print (output);
Próbowałem też z tablicami ale to kończyło się wyparowaniem MT4...
Ale coś takiego też nie działa:
Kod: Zaznacz cały
MT4_EXPFUNC void __stdcall mojString(char* input, char* output)
{
strcpy(output, input);
}
Jak to w ogóle ugryźć?
Ja chcę "tylko" przekazać c_string do dll (ciąg znaków zakończony NULL o dowolnej długości, takich używa MQL) i dostać z powrotem obrobiony c_string, zazwyczaj o innej długości.