powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DWORD to unsigned char*
23 сообщений из 23, страница 1 из 1
DWORD to unsigned char*
    #34290290
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется структура
Код: plaintext
1.
2.
3.
4.
typedef struct
{
	DWORD	ID[ 5 ];		
	.....
} TCID; 

требуется передать в unsigned char* значение ID[0]. Пробовал, мой "код" при компиляции не ругается, но вот при передаче вылетает ошибка. Как это правильно сделать?
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290370
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sax_Пробовал, мой "код" при компиляции не ругается, но вот при передаче вылетает ошибка. Как это правильно сделать?Так и показал бы свой код.
Но должно сгодиться (unsigned char*)ID[0], при неявном предположении, что длина адреса равна 4 байтам.
И куда передаем, в какой ОС?
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290385
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandrew sax_Пробовал, мой "код" при компиляции не ругается, но вот при передаче вылетает ошибка. Как это правильно сделать?Так и показал бы свой код.
Но должно сгодиться (unsigned char*)ID[0], при неявном предположении, что длина адреса равна 4 байтам.
И куда передаем, в какой ОС?
Передаем из одной DLL в другую. WinXP. Тоже самое было и у меня!
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290443
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ pandrew sax_Пробовал, мой "код" при компиляции не ругается, но вот при передаче вылетает ошибка. Как это правильно сделать?Так и показал бы свой код.
Но должно сгодиться (unsigned char*)ID[0], при неявном предположении, что длина адреса равна 4 байтам.
И куда передаем, в какой ОС?
Передаем из одной DLL в другую. WinXP. Тоже самое было и у меня!

Скорее всего что-то напутал в своем коде.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290458
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция DLL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
extern "C" int __declspec(dllexport)  getID(unsigned char* ID)
{
          int stat =  0 ;
          TCID CID;
          stat = GetCID(&CID);
          if (stat ==  0 )
          {
                  strcpy(ID,(unsigned char*)CID.ID[ 0 ]);
          }
          return stat;
}
вызываю

Код: plaintext
1.
2.
unsigned char* ID = new char[ 10 ];
int stat = getID(ID);
frmMain->Caption = AnsiString(*ID);
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290464
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ID [0] - это по логике должен быть символ или указатель на символ?
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290507
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenID [0] - это по логике должен быть символ или указатель на символ?
Это должен быть массив символов
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290512
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ HryuckinnenID [0] - это по логике должен быть символ или указатель на символ?
Это должен быть массив символов
Точнее строкой DWORD, там где-то 10 символов
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290521
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку выдает на int stat = getID(ID);
Ошибка: Assecc violation по такому-то адресу в модуле CC3260MT.dll
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290523
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я бы передал (unsigned char*) &CID.ID [0]
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290532
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то у тебя выходит, что ты значение ID [0] пытаешься представить как указатель:
(unsigned char*)CID.ID[0],
что не есть правильно.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290541
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
extern "C" int __declspec(dllexport)  getID(unsigned char *ID)
{
          int stat =  0 ;
          TCID CID;
          stat = GetCID(&CID);
          if (stat ==  0 )
          {
                  sprintf(ID, "%d", CID[ 0 ]);
          }
          return stat;
}
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290553
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_Ошибка: Assecc violation по такому-то адресу в модуле CC3260MT.dll

И, небось, попытка обращения к памяти по твоему id.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290560
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenТогда я бы передал (unsigned char*) &CID.ID [0]

Прокатило! Ошибки нет, только вот пока выдает не то, что надо.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290598
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо полностью код смотреть и тот, что кладет данные в структуру, и тот, что читает
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290618
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учит, что unsigned char - это есть BYTE, так что strcpy напихает тебе по 4 символа в каждый DWORD.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290619
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenНадо полностью код смотреть и тот, что кладет данные в структуру, и тот, что читает
Я полностью выложил, то что у меня было. А того "куска", что кладет именно в CID у меня нет. Это dll разработана не мною.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290626
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenУчит, что unsigned char - это есть BYTE, так что strcpy напихает тебе по 4 символа в каждый DWORD.
Сейчас я немного запутался, но в ID[0] должно быть пятизначное число, которое может быть отрицательным
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290658
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя по существу массив из 5 двойных слов (CID), который ты передаешь strcpy в качестве источника, чтобы она скопировала его содержимое в ID. Поставь брейкпойнт на строку с вызовом strcpy () и посмотри в отладчике, что реально в этом массиве находится. Не знаю, что ты имеешь в виду под "пятизначным числом".
Пятизначное число в бинарном представлении вполне может содержаться в ID [0], даже и отрицательное. Но тогда зачем передавать его с помощью функции копирования строк? А пятизначное число в символьном представлении ("-12345") в DWORD не понестится.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290704
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenТогда я бы передал (unsigned char*) &CID.ID [0]

Функция копирования строк прекратит работать при встрече нулевого байта. Во первых он может быть слишком рано, до завершения интересуемых байт, во вторых он может быть слишком далеко, после выхода за границу допустимой области памяти. В первом случае данные будут не достоверные, во втором или не достоверные или будет акссес виолейшен.

Это по поводу потери данных.

По смыслу записи - не вижу смысла приобразовывать данные для того чтобы их передать на верх с последующей конвертацией в строку.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290707
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И я о том же...
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290714
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh HryuckinnenТогда я бы передал (unsigned char*) &CID.ID [0]

Функция копирования строк прекратит работать при встрече нулевого байта. Во первых он может быть слишком рано, до завершения интересуемых байт, во вторых он может быть слишком далеко, после выхода за границу допустимой области памяти. В первом случае данные будут не достоверные, во втором или не достоверные или будет акссес виолейшен.

Это по поводу потери данных.

По смыслу записи - не вижу смысла приобразовывать данные для того чтобы их передать на верх с последующей конвертацией в строку.
Спасибо всем. Вот так работает
Код: plaintext
sprintf(ID, "%d", CID[ 0 ]);
и выдает правильные значения.
...
Рейтинг: 0 / 0
DWORD to unsigned char*
    #34290718
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ HryuckinnenУчит, что unsigned char - это есть BYTE, так что strcpy напихает тебе по 4 символа в каждый DWORD.
Сейчас я немного запутался, но в ID[0] должно быть пятизначное число, которое может быть отрицательным

То что я тебе раньше предложил - это конвертация в строку в самой функции. Ты же можешь пойти и другим путем, передать наверх число, а там его сконвертировать.

Пятизначное число в десятичной системе исчесления имеет отношение к информатике по тольку по скольку, ибо числа представляются в двоичной системе исчесления.

Раз у тебя пятизначное число, то максимальное число будет 99999, косличество всех возможных чисел - 199999, а это меньше чем 2^18, т.е. меньше 3-х байт. Так что в дубель ворд поместиться полюбому.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DWORD to unsigned char*
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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