![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Командор Норрингтон |
![]()
Сообщение
#1
|
Madman ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 477 Регистрация: 28-August 06 Из: Planet Earth Пользователь №: 4,052 ![]() |
Я на VB6, и Delphi...
А вы на чём? |
![]() ![]() |
navy |
![]()
Сообщение
#2
|
Hagane no Renkinjutsushi ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Seaward.Ru Team Сообщений: 5,972 Регистрация: 15-March 05 Из: Волгоград Пользователь №: 578 ![]() |
Цитата "warning: address of local variable 'retData' returned". этот ворнинг показывает, что произошло неявное преобразование типов char[] в char*. Т,е. просто был передан указатель на массив (компилер правильно разобрался) Чтобы понять почему твой код неверен, неплохо бы его прогнать в дебаггере, типа IDA, для наглядности ![]() Скорее всего проблема в том, что это разные данные с точки зрения компилера... и поэтому он их размещает в разных участках памяти.. char retData[] = "1234567890" это наверно в стек а это CHAR* str = "Hellow World"; в ресурс или наоборот ПОэтому у тебя указатель и показывает в пустоту.. т.к. относительно ДЛЛ и ЕХЕ это разные адреса ![]() ![]() |
Warship |
![]()
Сообщение
#3
|
Гроза морей ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: бета-тестер Сообщений: 441 Регистрация: 29-April 07 Из: Прим. край г. Находка Пользователь №: 9,103 ![]() |
Хотя, по идее, твой вариант должен работать как надо... я дома поднима куски длл-ки для шторма, там похоже было, гляну че и как ![]() Ок, спасиб ![]() По ходу дела появились еще вопросы: Например, мне нужно запихнуть определенный байт в буфер (void*, указатель на область памяти; я его юзаю вместо C-шарпового массива байт ![]() Я делал так (не факт, что это вообще правильно; тут еще и сам буфер усекается до этой позиции) Код void* arrayPtr = NULL; arrayPtr = BufferSet(arrayPtr, 0x01, 0); arrayPtr = BufferSet(arrayPtr, 0xA0, 1); // ... /// Функция записывает в буфер указанный байт на указанную позицию. void* BufferSet(void* _buff, unsigned char _byte, unsigned long _pos) { _buff = realloc(_buff, _pos + 2); ((unsigned char*) (_buff))[_pos] = _byte; ((unsigned char*) (_buff))[_pos + 1] = '\0'; return _buff; } И здесь появляется непонятный мне момент - если не записывать завершающий нуль, то в буфере в конце оказывается какой-то мусор - откуда он? Второй вопрос: как сделать, чтобы функция не возвращала указатель, а записывала все это дело в свой первый параметр? Т.е. по типу ref/out параметров в C#. P.S. Спец. литературы по C++ мне сейчас читать особо не хочется, ибо пока-что освоение языка идет очень неспешно и больше с оглядкой на C#. Когда возьмусь более серьезно, наверное, буду укуриваться Бьерном Страуструпом и его книгой "Язык программирования C++" - судя по отзывам в инете, она лучшая. |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 05:06 |