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

Вниз

Помогите, пожалуйста, решить проблему с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
3-46652
Agabr
2003-04-24 16:34
2003.05.15
MIDAS


1-46747
Max1111
2003-05-05 11:21
2003.05.15
Про меню, путь (помогите plizzzz)


14-46894
Soft
2003-04-24 18:27
2003.05.15
Религия это клево


3-46651
galexis
2003-04-24 16:29
2003.05.15
Помогите составить правильный SQL запрос.


6-46864
R@nger
2003-03-15 10:42
2003.05.15
Frames в WebBrowser