Форум: "WinAPI";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Внизработа с 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c