|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.12.2018, 20:18 | #1 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
Delphi 10.2 - system exception – с переносом кода в библиотеку
Доброе время суток форумчане
Есть следующий код который просто читает word файл и его сохраняет, а потом открывает – все хорошо работало, но после переноса строк кода (работы с документом word) Код:
Debugger Fault Notification --------------------------- Project D:\Prog\_Example\Example application\PEx_application.exe faulted with message: 'system exception (code 0xc000000d) at 0x77417fdc'. Process Stopped. Use Step or Run to continue. --------------------------- Приложение (вызвавшее dll) Код:
Что может быть не так? Заранее спасибо. Последний раз редактировалось KBO; 29.12.2018 в 23:08. |
29.12.2018, 23:25 | #2 |
Участник клуба
Регистрация: 28.11.2007
Сообщений: 1,521
|
При работе с dll могут возникать сложности. Перед вызовом функций для работы с COM объектами используйте CoInitialize(Nil) и CoUninitialize соответственно. Исключения составляет функция CoGetMalloc и функции выделения памяти.
P.S. CoInitialize(Nil) достаточно вызвать один раз при инициализации dll.
Всегда рад помочь!
|
29.12.2018, 23:33 | #3 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
Ставил,
Код:
|
30.12.2018, 00:24 | #4 |
Участник клуба
Регистрация: 28.11.2007
Сообщений: 1,521
|
Попробуйте без CoUninitialize. Функцию инициализации лучше вызывать непосредственно в dll.
Всегда рад помочь!
|
30.12.2018, 00:32 | #5 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
Указал в
Код:
P.S. ("SharaMem" - указаны в обоих проектах) |
30.12.2018, 01:03 | #6 |
Участник клуба
Регистрация: 28.11.2007
Сообщений: 1,521
|
Я собрал проект в Delphi 10.2. У меня работает... Вы точно везде убрали CoUninitialize?
Напишите в dll'ке так: Код:
Всегда рад помочь!
|
30.12.2018, 02:32 | #7 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
действительно правы, работает даже без "CoInitialize(Nil)".
Значит дело в другом, у меня библиоте много процедур и функций. Я тут привел только то, что касается непосредственно Word. Интересно... |
30.12.2018, 10:45 | #8 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
Разобрался, да не совсем.
Если эти функции в одном модуле библиотеки - то все работает. Но у меня все разбросано по двум модулям. В первом модуле: CreateWord, Open_Doc_Template, CloseDoc. Во втором модуле: OPEN_MAKE_DOC, SaveDocAs, Close_Document значит собака где-то в этом месте зарыта... т.е. поправка, если все функции в *dpr*, то все работает, А если в двух *pas*, то - ошибка Последний раз редактировалось KBO; 30.12.2018 в 10:59. |
30.12.2018, 12:52 | #9 | |
Участник клуба
Регистрация: 28.11.2007
Сообщений: 1,521
|
Цитата:
P.S. Отходя от основного вопроса дам несколько советов: 1. Используйте Result для указания результата выполнения функций (будет универсально, проще, понятно); 2. Старайтесь явно указывать соглашения о вызове функций, поможет избежать потенциальных ошибок; 3. В процедуре OPEN_MAKE_DOC при вызове shellexecute у вас передаётся не проинициализированный handle (лучше такое имя для переменной не использовать); 4. При указании библиотеки (external 'SPF') старайтесь писать имена целиком ('SPF.dll'); 5. Лучше не использовать тип данных string при экспорте функций т.к. это внутренний тип данных Delphi и при подключении библиотеки к программе написанной на другом языке будут проблемы; ...
Всегда рад помочь!
|
|
30.12.2018, 13:33 | #10 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
Спасибо за советы Terran.
вот dll c программой ссылка {Кажется нашел проблему, я в одном из модулей dll (а именно в "UDoc.pas") подключаю "Vcl.DBGrids;" - и когда я его подключаю возникает ошибка, как ее добиться описал ниже} посмотрите пожалуйста 1 запускаете программу (в delphi) 2 нажимаете кнопку (появляется документ word) 3 закрываете документ word 4 закрываете программу и должна выскочить ошибка Насчет этого, в help по "shellexecute" (- что это хендл родительского окна), как проинициализировать handle, если в dll даже окна нет? Или сюда нужно передавать тогда дескриптор окна вызывающего приложения? Последний раз редактировалось KBO; 30.12.2018 в 16:14. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с переносом кода с С++ на С# (Машина Тьюринга) | Konark | C# (си шарп) | 3 | 19.02.2015 17:26 |
Проблемы с переносом кода с Delphi 7 на Delphi XE2 | MORPEH | Общие вопросы Delphi | 1 | 05.08.2013 14:09 |
При выполнение кода выводится Debugger exception notification | sasha198407 | БД в Delphi | 0 | 31.03.2012 11:50 |
ошыбка unhandled exception of type 'system.argumentNullexception' occurred in mscorlib.dll | Pein95 | C# (си шарп) | 3 | 10.08.2011 11:04 |
ошыбка Project vk_id.exe raised exception class eoserror with message System error | Pein95 | Общие вопросы Delphi | 6 | 17.06.2011 20:38 |