|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.08.2017, 12:17 | #1 |
Новичок
Джуниор
Регистрация: 07.08.2017
Сообщений: 3
|
tIdUDPSocket в DLL
Добрый день!
Понадобилось написать простенькую внешнюю компоненту для 1С, общающуюся с железкой по UDP. Сначала, естественно, написал всё в обычном проекте. Отладил. Работает. Перенес код в DLL внешней компоненты, тоже отлаженной и рабочей. Вылетает с исключением при вызове конструктора TIdUDPClient.Create(). В консольном приложении тоже всё работает, а вот в DLL ни в какую. Что я не так делаю? Код:
|
07.08.2017, 12:43 | #2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
DLL как объект Windows знать не знает про разные объекты "надстроек" Delphi.
Цитата:
http://www.programmersforum.ru/showt...ht=DLL+TObject http://www.programmersforum.ru/showt...ht=DLL+TObject P.S. а так же про string!!! в D7 лекарство ShareMem(только для string!!! но не TObject) и это прямо прописано в исходнике головного модуля DLL или же НЕ ИСПОЛЬЗОВАТЬ на стыке (НЕ ПЕРЕДАВАТЬ между DLL и основной программой) НИКАКИЕ данные за исключением ИЗВЕСТНЫХ windows(числа (включая идентификаторы системных объектов(окон) HWND) + указатели строк (LPSTR и аналоги))
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.08.2017 в 12:54. |
|
07.08.2017, 13:03 | #3 |
Новичок
Джуниор
Регистрация: 07.08.2017
Сообщений: 3
|
Там проблема не в передаче параметров, а в том, что при вызове конструктора TIdUDPClient вылезает исключение read at address 00000000
P.S. Причину в общем понял - в DLL отсутствует TObject, от которго, в конечном счете, наследован TIdUDPClient. А вот как побороть - не понял. Сделал TDataModule в DLL, кинул на него компонент tIdUDPClient. Та же фигня - исключение при вызове конструктора. Последний раз редактировалось FRoM; 07.08.2017 в 13:39. |
07.08.2017, 14:40 | #4 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Цитата:
А вот всякие глобальные объекты используемые и создаваемые при ИНИЦИАЛИЗАЦИИ программы (в блокАХ initialization) созданы НЕ БУДУТ. и их использование(без иницализации) как раз и получат AV at 000000. Цитата:
программа — запись алгоритма на языке понятном транслятору
|
|||
07.08.2017, 15:10 | #5 |
Новичок
Джуниор
Регистрация: 07.08.2017
Сообщений: 3
|
Где бы еще посмотреть, какого именно объекта не хватает, чтобы его руками создать? Шерстить весь код конструкторов по цепочке наследования TIdUDPClient?
|
07.08.2017, 16:37 | #6 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Цитата:
Код:
Код:
Код:
Цитата:
Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.08.2017 в 16:42. |
||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. | 8Observer8 | Qt и кроссплатформенное программирование С/С++ | 12 | 25.06.2015 03:18 |
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? | AntyDES | C# (си шарп) | 11 | 10.10.2012 20:00 |
Debugger Kernel BORDBK160.DLL or BORDBK160N.DLL is missing or not registered. | Человек_Борща | Общие вопросы Delphi | 0 | 15.07.2012 14:01 |
Ошибка при выхове функций Bass.dll из другой DLL | SalasAndriy | Общие вопросы Delphi | 7 | 21.10.2009 23:36 |