Вопрос № 183113: Здравствуйте! Прошу помощи в следующем вопросе: Имеется элемент очереди (дисциплина обслуживания FIFO): struct Queue { char * data; //указатель на данные Queue * next; //указатель на следующий элемент очереди } * begin; ...
Вопрос № 183113:
Здравствуйте! Прошу помощи в следующем вопросе: Имеется элемент очереди (дисциплина обслуживания FIFO): struct Queue { char * data; //указатель на данные
Queue * next; //указатель на следующий элемент очереди
} * begin; //указатель на начало очереди функции void Put(Queue** queue, char* data); // поместить данные в конец очереди; char* Get(Queue** queue); // извлечь данные из начала очереди (при этом элемент удаляется из очереди); void PrintQueue(Queue* queue); //
вывод на экран содержимого очереди. void WriteQueue(char * fname, Queue * pque); – функция записывает элементы очереди в файл; Queue * ReadQueue(char * fname); – функция читает значения элементов из файла и создает очередь оформить в виде библиотеки DLL; создать новый проект для демонстрации работы с DLL и функциями; необходимо использовать динамическое связывание без импорта при динамическом связывании необходимо в проекте с главной программой объяв
ить указатели на функции, содержащиеся в DLL. Вот сами функции
y = (char*)calloc(10,sizeof(char)); while(1) { ReadFile(myFile, &size, sizeof(DWORD), &dwRdBytes, NULL); if (dwRdBytes == sizeof(DWORD)) { ReadFile(myFile, y, size, &dwRdBytes, NULL); if (dwRdBytes) { Put(&ReadQueue,y); } else break; } else break; } free(y); CloseHandle(myFile); return
ReadQueue; } void Put(Queue** queue, char* data)// поместить данные в конец очереди { Queue* que1 = (Queue*)calloc(1,sizeof(Queue)); que1->data=(char*)malloc(strlen(data)+1); strcpy(que1->data,data);
Queue* tmp=*queue; if(!tmp) *queue=que1; else { while(tmp->next) tmp = tmp->next; tmp->next=que1; } } char* Get(Queue** queue) // извлечь данные из начала о
череди (при этом элемент удаляется из очереди) { Queue* tmp1 = *queue; char* tmp; if(!tmp1) { return 0; }
else { tmp = tmp1->data; *queue = tmp1->next; return tmp; } } void PrintQueue(Queue* queue) // вывод на экран содержимого очереди { while(queue) { cout << queue->data << endl; queue = queue->next; } }
Еще есть мои попытки.. но как прикрепить проект к вопросу-не знаю...
Отправлен: 10.05.2011, 23:34
Вопрос задал: katbka (1-й класс)
Всего ответов: 1 Страница вопроса »
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, katbka! Вы самостоятельно справились с задачей - молодец Единственная ошибка: файл создается с "неправильным" именем, а не date.txt, как предполагалось. Дело в том, что в DLL у Вас есть нехороший момент: Вы передаете имя файла, как ANSI-строку, а вызываете CreateFile(LPCTSTR(fname),...). По-умолчанию вызывается CreateFileW и LPCTSTR означает UNICODE-строку
Сделайте в WriteQueue так:
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.