Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.016 c
3-46613
Ann
2003-04-22 15:42
2003.05.15
та же date


11-46676
Q_Boy
2002-08-12 16:37
2003.05.15
KOL и BMP


3-46608
real_dimedrol
2003-04-22 21:11
2003.05.15
Вопрос по Quickreport


8-46858
Анат
2003-02-01 15:05
2003.05.15
Рисование на рабочем столе


3-46626
Карелин Артем
2003-04-23 13:56
2003.05.15
FireBird и безопасность метаданных.




   Наверх