powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конвертировать строку
25 сообщений из 50, страница 2 из 2
Конвертировать строку
    #34011245
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой компилятор:warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben
Что в переводе: возвращается адрес локальной или временной переменной
И что в этом не так?!
...
Рейтинг: 0 / 0
Конвертировать строку
    #34011257
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А МСДН злопыхает:Local variables and temporary objects are destroyed when a function returns, so the address returned is not valid. Совсем какой-то фатал... На ведь всё пашет...
...
Рейтинг: 0 / 0
Конвертировать строку
    #34011377
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin Мой компилятор:warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben
Что в переводе: возвращается адрес локальной или временной переменной
И что в этом не так?!
Вас не смущает, что сама переменная расположена на стеке и после возврата из функции в любой момент может быть затерта?
...
Рейтинг: 0 / 0
Конвертировать строку
    #34011736
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin А МСДН злопыхает:Local variables and temporary objects are destroyed when a function returns, so the address returned is not valid. Совсем какой-то фатал... На ведь всё пашет...

Опасное это дело. Может потом аукнуться. Если нет возможности использовать парметры класса или нет желания использовать глобальные переменные, то стандартный ход - передавать указатель на переменную, которая должна возвращаться, в функцию.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34013325
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВас не смущает, что сама переменная расположена на стеке и после возврата из функции в любой момент может быть затерта? AkhОпасное это дело. Может потом аукнуться. Если нет возможности использовать парметры класса или нет желания использовать глобальные переменные, то стандартный ход - передавать указатель на переменную, которая должна возвращаться, в функцию.Это у меня длл - происходит передача инфы (создала линк, запустила линк) в дин./стат. обьекты C#; и все отдыхает... Т.е. какая может быть опасность?!
...
Рейтинг: 0 / 0
Конвертировать строку
    #34013385
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinЭто у меня длл - происходит передача инфы (создала линк, запустила линк) в дин./стат. обьекты C#; и все отдыхает... Т.е. какая может быть опасность?!

Да хоть Папа Римский. Нельзя возвращать указатели на локальные данные.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34013442
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinЭто у меня длл - происходит передача инфы (создала линк, запустила линк) в дин./стат. обьекты C#; и все отдыхает... Т.е. какая может быть опасность?!

Вам правильно подсказали... Возвращать указатель на стэк - это явный скрытый джипиэф...Если Вам хочеться кинуть подлянку всей организации - тогда это самое то...Иначе - попахивает проф. непригодностью...

Для возврата в си бимоль используйте следующие подходы...
1) из си бимоля зафиксируйте передаваемый буфер, вызовете Вашу функцию с передачей длины этого буфера. Внутри обработайте ограничение по длине спущенного Вам с верху буфера. После выхода в си бимоле - расфиксируйте буфер...
2) используйте мэнэджет код внутри Вашей дэлеле. Напишите на мэнэджет си плас плас работу с переданным с верху буффером. В Object(е) есть и длина и все прибамбасы. Вызывайте стандартную конвертацию из си бимоля..Далее подготовленные на стеке данные передавайте уже анмэнэджет коду (если необходимо)...Вам это делать не нуна - просто если будет не хватать возможностей мэнэджет си плас пласа только..

с уважением
(круглый)
...
Рейтинг: 0 / 0
Конвертировать строку
    #34013600
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0 си бимоль

И все-таки "си диез" ;)
...
Рейтинг: 0 / 0
Конвертировать строку
    #34013745
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhИ все-таки "си диез" ;)

как собаку коровой не называй - всё равно молока не будет

думаю пофигу как обзывать...запало в душу просто когда то...гы..

(круглый)
...
Рейтинг: 0 / 0
Конвертировать строку
    #34014178
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Для возврата в си бимоль используйте следующие подходы...
1) из си бимоля зафиксируйте передаваемый буфер, вызовете Вашу функцию с передачей длины этого буфера. Внутри обработайте ограничение по длине спущенного Вам с верху буфера. После выхода в си бимоле - расфиксируйте буфер...
2) используйте мэнэджет код внутри Вашей дэлеле. Напишите на мэнэджет си плас плас работу с переданным с верху буффером. В Object(е) есть и длина и все прибамбасы. Вызывайте стандартную конвертацию из си бимоля..Далее подготовленные на стеке данные передавайте уже анмэнэджет коду (если необходимо)...Вам это делать не нуна - просто если будет не хватать возможностей мэнэджет си плас пласа только..
Убедили! Но так хоть можно:
Код: plaintext
1.
2.
3.
4.
5.
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath)
{
...
LPCWSTR l(s);
return l;
}
И зловещих предупреждений нет!!!
...
Рейтинг: 0 / 0
Конвертировать строку
    #34014554
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin kolobok0Для возврата в си бимоль используйте следующие подходы...
1) из си бимоля зафиксируйте передаваемый буфер, вызовете Вашу функцию с передачей длины этого буфера. Внутри обработайте ограничение по длине спущенного Вам с верху буфера. После выхода в си бимоле - расфиксируйте буфер...
2) используйте мэнэджет код внутри Вашей дэлеле. Напишите на мэнэджет си плас плас работу с переданным с верху буффером. В Object(е) есть и длина и все прибамбасы. Вызывайте стандартную конвертацию из си бимоля..Далее подготовленные на стеке данные передавайте уже анмэнэджет коду (если необходимо)...Вам это делать не нуна - просто если будет не хватать возможностей мэнэджет си плас пласа только..
Убедили! Но так хоть можно:
Код: plaintext
1.
2.
3.
4.
5.
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath)
{
...
LPCWSTR l(s);
return l;
}
И зловещих предупреждений нет!!!

У тебя s локальная переменнная? Если да, то обманывать компилятор не хорошооооо!
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015081
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhУ тебя s локальная переменнная? Если да, то обманывать компилятор не хорошооооо!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath)
{
WCHAR  s[MAX_PATH * 3  +  4 ];
s[ 0 ] = 0x00;
...
// Идет передача инфы в s
...
LPCWSTR l(s);
return l;
}
Нуно так, что ли???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath)
{
extern WCHAR  s[MAX_PATH * 3  +  4 ];
s[ 0 ] = 0x00;
...
LPCWSTR l(s);
return l;
}
Совсем запутался...

PSКак хорошо сидеть на "си бимоле" - при полных непонятках его работы по выдел./очистке памяти (сам все делает!) пашет все в 2-3раза бодрее (проверял).
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015151
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну скока мона?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath)
{
WCHAR  *s;
s=new WCHAR[MAX_PATH * 3  +  4 ];
s[ 0 ] =  0 ;
...
// Идет передача инфы в s
...
return s;
}
v skopinКак хорошо сидеть на "си бимоле" - при полных непонятках его работы по выдел./очистке памяти (сам все делает!) пашет все в 2-3раза бодрее (проверял).ты ишо на жо скрипт подсядь.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015162
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPSМожет можно где-то компактно почитать об этом - я бы потом отдельной темой опубликовал?
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015174
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про управление памятью и освобождение строк где-то в мсдне было.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015185
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы жо скрипт на самом деле хороший
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015197
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это не отменяет прекрасную природу явного управления памятью.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015249
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoно это не отменяет прекрасную природу явного управления памятью.Садо-мазо какое-то!?
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015303
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не шаришь. Всё, что пишется на жабах и сишах есть амно и ЗЛО и АД следует за ним.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015537
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath, WCHAR *s, WORD s_len);

Или так, например.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015658
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Код: plaintext
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath, WCHAR *s, WORD s_len);

Как-то вычерно, лучше тогда:
Код: plaintext
extern "C" __declspec(dllexport) HRESULT ReadLink(LPCWSTR LnkPath, WCHAR *s, WORD s_len);
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015671
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin Akh
Код: plaintext
extern "C" __declspec(dllexport) LPCWSTR ReadLink(LPCWSTR LnkPath, WCHAR *s, WORD s_len);

Как-то вычерно, лучше тогда:
Код: plaintext
extern "C" __declspec(dllexport) HRESULT ReadLink(LPCWSTR LnkPath, WCHAR *s, WORD s_len);


Пожалуйста. Главное, что смысл понял.
...
Рейтинг: 0 / 0
Конвертировать строку
    #34015688
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Конвертировать строку
    #34017017
nickolays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinСпасибо всем!!!!!!!!!!!!!!!!!
А пациловать напоследок?

CString str;
str.Format("%d",Int_value);
AfxMessageBox(str);
...
Рейтинг: 0 / 0
Конвертировать строку
    #34017931
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nickolaysCString str;
str.Format("%d",Int_value);
AfxMessageBox(str);он не умеет в свойствах проекта выставлять уникодные настройки, а уникод юзать хочет.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конвертировать строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]