Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / При простом подключении dll, возникает ошибка / 13 сообщений из 13, страница 1 из 1
30.12.2018, 16:45
    #39755164
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Доброе время суток форумчане.
У меня есть 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
30.12.2018, 17:19
    #39755174
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Sergey-2008Как только я, просто подключил в dll , новый модуль « Vcl.DBGrids; »Просто не повезло. Вернее, раньше везло.
Ты что-то в all не освобождаешь корректно.
...
Рейтинг: 0 / 0
30.12.2018, 18:14
    #39755186
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
YuRockТы что-то в all не освобождаешь корректно.
А как понять, что нужно освободить? до этого всеж было норм.
...
Рейтинг: 0 / 0
30.12.2018, 18:43
    #39755189
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Sergey-2008YuRockТы что-то в all не освобождаешь корректно.
А как понять, что нужно освободить? до этого всеж было норм.Найти ошибки в коде.
...
Рейтинг: 0 / 0
30.12.2018, 20:03
    #39755206
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Вот те строки, которые используются в 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
30.12.2018, 20:06
    #39755207
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Sergey-2008,

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

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


ошибка ушла
...
Рейтинг: 0 / 0
30.12.2018, 20:46
    #39755216
Sergey-2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
и впоследствии, все получилось вот так:
создание объекта с " 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
31.12.2018, 04:24
    #39755250
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Sergey-2008,

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

Может CoUninitialize; всё же после секции except поставить?..Да их вообще надо ставить в начале и в конце потока.
Если главный поток - вопще не надо (дельфя сама их вызывает).
...
Рейтинг: 0 / 0
08.01.2019, 17:31
    #39756815
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При простом подключении dll, возникает ошибка
Соколинский БорисПроверяй результат 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / При простом подключении dll, возникает ошибка / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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