Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизПомогите, пожалуйста, решить проблему с ActiveX компонентой! Найти похожие ветки
← →
Valentino (2003-04-14 10:30) [0]Как всем известно, при установке ActiveX компонент пользуются .OCX файлами. И все бы ничего, да только вот уже откомпилированный EXE-шник не работает на других машинах, где
нет такой же установленной компоненты. При чем ищет он этот OCX файл в той директории, откуда я с него в Делфи компоненту ставил.
Отсуда естественный вопрос к людям, использующим ActiveX компоненты, какой выход из этой ситуации, если мне нужно, чтобы EXE работал везде, где не установлен данный компонент?
Может можно его поместить в папку EXE-шника и заставить его искать OCX файл в ней, или зашить его в EXE-шник. Или как вообще делают?
(В моем случае имел ввиду ActiveSkin 4.27, но и в общем хотелость бы узнать).
← →
Dikobrazz (2003-04-14 11:22) [1]Надо ActiveX зарегистрировать при помощи regsvr32 (стандартная утилита Windows, находится в windows\system или system32). Использование очень простое, в командной строке пишешь:
regsvr32 <файл.ocx>
← →
vladnt (2003-04-14 11:24) [2]перепеши файл .ocx на машину и запусти в ком.строке
regsvr32.exe ActiveSkin.OCX
← →
Valentino (2003-04-14 23:55) [3]А программно это сделать можно?
А если работа в лок.сети и нет прав Админа, регестрироваться будет?
← →
крот (2003-04-15 05:26) [4]Конечно, можно. Например, запустить тот же regsrv32.exe с помощью WinExec, или напрямую вызвать ф - цию DllRegisterServer.
← →
LEON (2003-04-16 21:37) [5]я создавал пустой дочерний компонент от этого, и, кажется, работало.
← →
Valentino (2003-04-17 15:00) [6]Leon, чего-то я тебя не совсем понял. Можешь поподробнее объяснить?
← →
LEON (2003-04-20 23:38) [7]Type
TmyActiveXcomponent = class(TRegisteredActiveXComponent)
end;
procedure Register;
и стандартная процедура register,
и всё!
← →
evvcom (2003-04-21 10:48) [8]2 LEON: Это регистрация компонента в палитре компонентов Delphi. Речь не о том.
← →
lesa (2003-04-21 12:17) [9]function regdll(fullnamedll:string):boolean;
var
dllHand: THandle;
RegFunc: TDllRegisterServer; //добавьте OLECtl в список используемых модулей
begin
dllHand:= LoadLibrary(pchar(fullnamedll));
RegFunc:= GetProcAddress(dllHand, "DllRegisterServer"); //чуствительность к регистру?
if RegFunc <> 0 then result:=False else result:=True;
FreeLibrary(dllHand);
end;
function unregdll(fullnamedll:string):boolean;
var
dllHand: THandle;
RegFunc: TDllRegisterServer; //добавьте OLECtl в список используемых модулей
begin
dllHand:= LoadLibrary(pchar(fullnamedll));
RegFunc:= GetProcAddress(dllHand, "DllUnregisterServer"); //чуствительность к регистру?
if RegFunc <> 0 then result:=False else result:=True;
FreeLibrary(dllHand);
end;
← →
Valentino (2003-04-23 09:33) [10]Спасибо.
← →
Valentino (2003-04-26 01:06) [11]А как определить, зарегестрирован он уже, или нет, чтоб каждый раз не регестрировать?
← →
ion (2003-04-27 16:23) [12]Попробуй создать объект и по try ... except отловить создался ли он или нет
← →
Valentino (2003-05-03 15:18) [13]Но тогда такой вопрос:
Функцию regdll я вызываю onFormCreate. Но, к сожалению, на машине где модуль не зарегестрирован,
она не успевает произвести регистрацию, и выдается ошибка "Класс не зарегестрирован". Видимо, при инициализации приложения,
Windows использует модуль раньше, чем происходит FormCreate.
Делаю следующее:
program Project1;
...
uses ....
begin
WinExec ("regsvr32 /i actskin4.ocx", SW_HIDE);
Application.Initialize;
Application.Title := "Test Creator";
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Работает!!! Регестрирует без проблем.
А если в WinExec по-другому прописать, например вот так:
WinExec ("regsvr32 /i C:\ACTIVE SKIN\TestCreator\actskin4.ocx", SW_HIDE); -
Не работает... Люди, как сделать, чтобы регестрировало с путем???
P.S. Тоже самое и с функцией regdll. Если пишу: dllHand:= LoadLibrary("actskin4.ocx") - работает.
Регестрирует OCX, находящийся в папке EXE-шника. А если путь прописать - не работает.
ПОЧЕМУ???
← →
Mikelson (2003-05-03 16:55) [14]
> WinExec ("regsvr32 /i C:\ACTIVE SKIN\TestCreator\actskin4.ocx",
> SW_HIDE);
Попробуй путь взять в двойные кавычки
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c