![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| MrDmitry |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Блин, уже сломал всю голову, облазил нет а ответа так и не нашол, хотя вопрос нубский.
Есть такая функция
Функция отправляет запрос на сервер, получает xml ответ, парсит его и получает фио вошедшего. Данную функцию решил перенести в dll l
на датамодуле разместил IdHTTP1 вызов
модуль ShareMem в самом проекте также подключен (Через project > view source) ошибка Что не так? Это сообщение отредактировал(а) MrDmitry - 8.9.2011, 12:32 |
||||||
|
|||||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
Нельзя так строки передавать. Прочитай конец сгенерированного комментария.
|
|||
|
||||
| rodnover |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: 1 Всего: 10 |
Вот ключ к разгадке. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Ничего не ясно:
1) что такое TMains? 2) как ты умудряешься экспортировать из библиотеки метод объекта? (ключевое слово export не экспортирует, для этого есть слово exports, но применяется оно иначе) 3) как при этом ты импортируешь его в программе как простую функцию? (фактически это означает разный список параметров) -------------------- Обижено школьников: 8 |
|||
|
||||
| MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
1. Tmains - это форма просто в отрывки я показал как вызываю функцию кликом по кнопки 2. Вот тут вот поподробнее. Как раз тут скорее всего и есть косяк. Как я писал в 1 посте, просто тупо создал дата модуль кинул на него IdHTTP и все. Как сделать dll библиотеку, с учетом что нужно работать с IdHTTP? 3 Почему как простую функцию? После implementation я описываю функцию указывая что она внешняя и находится в библиотеке proc.dll. Это вроде называется Статическая загрузка dll |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Тут в другом вопрос - как эта длл у тебя вообще компилируется? До Access Violation при вызове дойти не должно, потому что вот это
Да, это так называется. Но экспортируешь ты метод объекта (вернее пытаешься экспортировать), а импортируешь простую функцию (не метод объекта). Если бы она нормально экспортировалась, это была бы ошибка во время выполнения, потому что у методов есть один неявный параметр при вызове (Self), а импорт с несовпадающим списком параметров это проблема. Вообще экзешник не должен запуститься, потому что query не найдется в нужной длл (поскольку экспорт так не делается). И тут ты опять что-то темнишь, если говоришь что оно запускается, но падает с исключегнием -------------------- Обижено школьников: 8 |
||||
|
|||||
| MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Ну компилируется, и создается длл без ошибок. При запуски exe вылатает ошибка из 1 поста, и вылатает каждый раз когда я вызываю функцию query
ЗЫ сорри немного ввел вас в заблуждения, т.к dll у меня не работает, я оставил все как есть и данную функцию копировал с проекта, при этом забыв убрать TMains, естественно в проекта DLL функция записана так
Это сообщение отредактировал(а) MrDmitry - 8.9.2011, 11:36 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Где создаётся объект datemodule1?
-------------------- Обижено школьников: 8 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
В общем есть пара замечаний, читай - ошибок, по коду.
Смотрим функцию query, что перенесена в dll... 1. зачем stdcall? планируется ее использование в приложениях, написанных не на делфи? 2. зачем data: TIdMultiPartFormDataStream, которая ни где не используется? 3. вторая строка после try: name_s:=Copy(xml1, 1, n-1); что есть xml1? что есть n? неинициализированные локальные переменные в которых лежит мусор. похоже, что не хватает строк по определению n и xml1. Дальше смотреть смысла не вижу. -------------------- There are always someone smarter than you... |
|||
|
||||
| MrDmitry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Извините за мою расторопность, я не до конца скопировал код функции исправил в 1 посте.
Разве TIdMultiPartFormDataStream ни где не используется? И да, начал переписывать функцию в длл т.к планируется её использование не только в этом проекте и не только на Delphi bems Как я уже писал как раз таки в этом скорее всего и есть моя ошибка которую я не знаю как решить. И как опять же я писал выше, я просто создал datamodule(New > datamodule) и кинул на него idhttp |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Создай экземпляр до того как будет вызвана любая экспортируемая функция в длл (в DLL_PROCESS_ATTACH) и освобождай его при выгрузке длл (в DLL_PROCESS_DETACH) что это такое ты можешь узнать из многочисленных книг и статей на эту тему Добавлено через 2 минуты и 15 секунд тогда убирай ShareMem из uses и дельфи-специфичные типы из параметров экспортируемых функций -------------------- Обижено школьников: 8 |
|||
|
||||
| MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
А вот это для меня уже сложно или я чего то не допанемаю, как все это делается? Или где про это можно почитать? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Первая ссылка по запросу "DLL_PROCESS_ATTACH в дельфи" в гугле ведет сюда http://delphi.about.com/cs/adptips2003/a/bltip1003_2.htm
-------------------- Обижено школьников: 8 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Хотя чтоб попроще, ты можешь использовать секции initialization и finalization юнита где объявлен датамодуль
-------------------- Обижено школьников: 8 |
|||
|
||||
| MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Блин. Как получается все это сложно :( Давайте попробуем пойти другим путём. Как можно отсылать get запрос не используя сторонних компонентов, таких как idhhtp в данном примере |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
initialization и finalization это очень просто, если прочитать книгу где описан язык.
компоненты indy можно использовать и без форм и датамодулей (создавая динамически) Один топик - один вопрос -------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |