Вот теоретический вопрос для вас, экспертов по сборке, работающих на C ++.Я часто хочу вернуть строку (char * или wchar *) из локальной переменной внутри функции.Как вы знаете, это невозможно сделать, так как локальная переменная теряет область видимости.Это вызывает у меня любопытство. Можно ли будет вытолкнуть данные, хранящиеся в этом месте, из функции?
Позвольте мне проиллюстрировать:
char *IllegalFunc()
{
char *ret = "Hello World";
return ret; //warning: returning the adress of a local variable
}
//what we are attempting
char *IllegalAndMostlyIllogicalFunc()
{
char *ret = "Hello World";
__asm {
//somehow copy *ret to ESP and return
}
}
char *ARightWayToDoIt()
{
char *ret = new char[12];
strcpy(ret, "Hello World");
return ret;
}
Это просто для любопытстват, я использую метод __asm ... я, вероятно, просто объявлю статический символ *, чтобы я мог импортировать функцию, как в c #
[dllimport(...)]
string IllegalFunc();
[dllimport(...)]
string ARightWayToDoIt(); //memory leak, I would need a FreeLastString() method