Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с Dll


Danchik ©   (2003-07-08 13:59:00) 

Помогите советом /подсказкой/, почему при вызове библиотеки выдаётся сообщение:
... class EOleSysError with message "Не был произведён вызов Colnitialize" ...


Danchik   (2003-07-08 15:22:00) [1]

Всем спасибо, я просто неуказал в разделе Uses
ComObj,
Всё заработало !


Danchik   (2003-07-08 15:00:00) [2]

Удалено модератором


Danchik   (2003-07-08 14:58:00) [3]

Попробовал вставить, при компиляции:
CoInitialize(nil);
результат:
[Error] test_Dll_n.pas(29): Undeclared identifier: "CoInitialize"


Digitman   (2003-07-08 14:49:00) [4]


> строка горит красным


это как ? а, может, у меня - зеленым ?) почем мне знать, что у тебя там и почему "горит" ?) ... изволь выражаться конкретными общеизвестными терминами)


и - попробуй-ка для начала вот так :

procedure TForm1.Button1Click(Sender: TObject);
begin
CoInitialize(nil);
try
extractor(); // Причём эта строка горит красным
finally
CoUnInitialize;
end;
end;


Danchik   (2003-07-08 14:37:00) [5]

Приведу вызов библиотеки:
var
Form1: TForm1;
implementation

Procedure extractor(); stdcall; external "dll_proj.dll";

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
extractor(); // Причём эта строка горит красным
except
ShowMessage("Ошибка при загрузочкеке DLL");
end;
end;


Danchik   (2003-07-08 14:37:00) [6]

Дело в том, что я не сталкивался с потоками


Digitman   (2003-07-08 14:31:00) [7]


> Смысл в том, чтобы


смысл в том, чтобы ты рассказал, как ты в доп.код.потоке, обращающемся к DLL, вызываешь из нее процедуру extractor().


Digitman   (2003-07-08 14:31:00) [8]


> Смысл в том, чтобы


смысл в том, чтобы ты рассказал, как ты в доп.код.потоке, обращающемся к DLL, вызываешь из него (из кодового потока) процедуру extractor().


Danchik   (2003-07-08 14:19:00) [9]

Чтото я не всё понял, приведу текст библиотеки:
library dll_proj;

uses
SysUtils,
Classes,
ComObj,
Windows,
ActiveX;

{$R *.res}
Procedure extractor() export; stdcall;
var
ServerIsRunning : boolean;
Unknown : IUnknown;
Result : HResult;
AppProgID : String;
App : Variant;
begin
try
//Указать программный идентификатор приложения-сервера
AppProgID:="AutoCAD.Application"; //тут вместот автокада можно влепить Word
ServerIsRunning := False;
Result := GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);
if (Result = MK_E_UNAVAILABLE) then
//Создать один экземпляр сервера
App := CreateOleObject(AppProgID)
else
begin
//Соединиться с уже запущенной копией сервера
App := GetActiveOleObject(AppProgID);
( "(load c:/temp/tmp.lsp)

Чтото я не всё понял, приведу текст библиотеки:
library dll_proj;

uses
SysUtils,
Classes,
ComObj,
Windows,
ActiveX;

{$R *.res}
Procedure extractor() export; stdcall;
var
ServerIsRunning : boolean;
Unknown : IUnknown;
Result : HResult;
AppProgID : String;
App : Variant;
begin
try
//Указать программный идентификатор приложения-сервера
AppProgID:="AutoCAD.Application"; //тут вместот автокада можно влепить Word
ServerIsRunning := False;
Result := GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);
if (Result = MK_E_UNAVAILABLE) then
//Создать один экземпляр сервера
App := CreateOleObject(AppProgID)
else
begin
//Соединиться с уже запущенной копией сервера
App := GetActiveOleObject(AppProgID);
ServerIsRunning := True;
end;
//показать окно приложения на экране и проработать с приложением
App.Visible := True;
App.ActiveDocument.SendCommand("(load c:/temp/tmp.lsp)");
except
// тут ещё кое-что
end;
end;


exports extractor;


begin
end.

Смысл в том, чтобы передать в автокад команду загрузки LISP программы из Dll


Anatoly Podgoretsky   (2003-07-08 14:11:00) [10]

Прислушайся к рекомендации (приказу) системы, произведи.


Digitman   (2003-07-08 14:07:00) [11]


> почему ... "Не был произведён вызов Colnitialize"


потому что ты, обращаясь к библиотеке в доп.код.потоке, не произвел его.


MBo   (2003-07-08 14:05:00) [12]

А если его произвести? ;)


Наверх

Титульная страница Поиск, карта сайта Написать письмо