powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / При простом подключении dll, возникает ошибка
13 сообщений из 13, страница 1 из 1
При простом подключении dll, возникает ошибка
    #39755164
Sergey-2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток форумчане.
У меня есть dll, которая работает с Microsoft Word – все нормально, т.е.:

Код: plaintext
1.
2.
3.
4.
1 запускаю программу (в delphi)
2 открывается файл word
3 он сохраняется под другим названием и открывается
4 закрываете word
5 закрываю программу 

Как только я, просто подключил в dll , новый модуль « Vcl.DBGrids; », но не использую пока его (он мне будет в дальнейшем нужен) и проделываю операции описанные выше, то при закрытии программы (в режиме отладки), выпадает ошибка:
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.

Заранее спасибо за ответ
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755174
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-2008Как только я, просто подключил в dll , новый модуль « Vcl.DBGrids; »Просто не повезло. Вернее, раньше везло.
Ты что-то в all не освобождаешь корректно.
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755186
Sergey-2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockТы что-то в all не освобождаешь корректно.
А как понять, что нужно освободить? до этого всеж было норм.
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755189
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-2008YuRockТы что-то в all не освобождаешь корректно.
А как понять, что нужно освободить? до этого всеж было норм.Найти ошибки в коде.
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755206
Sergey-2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот те строки, которые используются в dll
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
uses
  UFile_Action, ComObj, IBX.IBCustomDataSet, ShellAPI,
  Activex, Vcl.DBGrids;

implementation

function CreateWord: boolean;
//create word application
begin
  CreateWord := true;
  try
    Words_Templs := CreateOleObject('Word.Application');
  except
    begin
//      showmessage('Пакет Microsoft Office не найден');
  //    Application.MessageBox('', 'Warning', MB_OK+MB_ICONEXCLAMATION);
      CreateWord := false;
    end;
  end;
End;

function Open_Doc_Template(APath_file: string): boolean;
//open template file
var
  LDoc: variant;
begin
  CoInitialize(Nil);
CreateWord;
  Open_Doc_Template := true;
  try
    LDoc := Words_Templs.Documents;
    LDoc.Open(APath_file);
  except
    Open_Doc_Template := false;
  end;
  CoUninitialize;
End;

exports
  Open_Doc_Template;



но тут все что создается из com, это объект word,
его я включил в " CoInitialize(Nil); " и " CoUninitialize "
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755207
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-2008,

Ну вот. Где освобождение Words_Templs перед выгрузкой dll?
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прелестно: ты собственными руками убиваешь СОМ во время работы СОМ-сервера. Какой
вредитель тебя этому научил?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755209
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-2008,
Проверяй результат Coinitialize() - так определишь, нужно ли финализировать.
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755213
Sergey-2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

Да, действительно, забыл сделать
Код: pascal
1.
Words_Templs := Unassigned;


ошибка ушла
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755216
Sergey-2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и впоследствии, все получилось вот так:
создание объекта с " CoInitialize(Nil) ";

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function CreateWord: boolean;
//create word application
begin
  CoInitialize(Nil);
  CreateWord := true;
  try
    Words_Templs := CreateOleObject('Word.Application');
  except
    begin
      showmessage('Пакет Microsoft Office не найден');
      CreateWord := false;
    end;
  end;
End;



работа с ним
и разрушение с " Unassigned " и " CoUninitialize; "

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function SaveDocAs(ANamePath, ANameFile: string; AOpenDoc: integer):boolean; export;
//save created doc
{
LOpenDoc
  0 - not open created doc
  1 - open created doc
}
var
  LPath: string;
begin
  SaveDocAs := true;
  try
    begin
      Words_Templs.ActiveDocument.SaveAs(ANamePath+'result_doc.rtf');
      CloseDoc;
      Close_Document(0);
      if AOpenDoc = 1 then
        OPEN_MAKE_DOC(ANamePath, 'result_doc.rtf', '', 0, LPath);
      Words_Templs := Unassigned;
      CoUninitialize;
    end;
  except
    SaveDocAs := false;
  end;
end;
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755250
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-2008,

Может CoUninitialize; всё же после секции except поставить?..
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39755287
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpSergey-2008,

Может CoUninitialize; всё же после секции except поставить?..Да их вообще надо ставить в начале и в конце потока.
Если главный поток - вопще не надо (дельфя сама их вызывает).
...
Рейтинг: 0 / 0
При простом подключении dll, возникает ошибка
    #39756815
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисПроверяй результат Coinitialize() - так определишь, нужно ли финализировать. https://docs.microsoft.com/en-us/windows/desktop/api/combaseapi/nf-combaseapi-couninitialize A thread must call CoUninitialize once for each successful call it has made to the CoInitialize or CoInitializeEx function, including any call that returns S_FALSE .Так что
Код: pascal
1.
OleCheck(CoInitialize(nil));

достаточно. И не нужно никаких проверок
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / При простом подключении dll, возникает ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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