Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.08;
Скачать: CL | DM;

Вниз

работа с Dll   Найти похожие ветки 

 
Danchik ©   (2003-07-08 13:59) [0]

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


 
MBo ©   (2003-07-08 14:05) [1]

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


 
Digitman ©   (2003-07-08 14:07) [2]


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


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


 
Anatoly Podgoretsky ©   (2003-07-08 14:11) [3]

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


 
Danchik ©   (2003-07-08 14:19) [4]

Чтото я не всё понял, приведу текст библиотеки:
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


 
Digitman ©   (2003-07-08 14:31) [5]


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


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


 
Digitman ©   (2003-07-08 14:31) [6]


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


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


 
Danchik ©   (2003-07-08 14:37) [7]

Приведу вызов библиотеки:
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) [8]

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


 
Digitman ©   (2003-07-08 14:49) [9]


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


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


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

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


 
Danchik ©   (2003-07-08 14:58) [10]

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


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

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


 
Danchik ©   (2003-07-08 15:22) [12]

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



Страницы: 1 вся ветка

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
3-24343
Groove_SQL
2003-08-18 08:45
2003.09.08
ORDER BY вычисляемое поле


14-24706
Zhirnov Maxim
2003-08-19 09:16
2003.09.08
Как заменить интегрированную видео-карту на AGP шную?


1-24436
MadGhost
2003-08-25 18:28
2003.09.08
Как в Memo1 добавлять строку?


3-24350
Алексей Петухов
2003-08-17 12:23
2003.09.08
Insufficient memory for this operation


3-24382
Nikkkkk
2003-08-15 09:44
2003.09.08
Как вTTable перейти к записи с оределенным номером???