Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-46870
sapsi
2003-03-18 08:22
2003.05.15
Организация удаленного подключения к локальной сети


14-46949
Malder
2003-04-20 16:01
2003.05.15
BlueCon


14-46927
Карелин Артем
2003-04-25 13:21
2003.05.15
Чем распаковать многотомный arj архив?


14-47003
Hint
2003-04-28 12:37
2003.05.15
Исходники за деньги


14-46914
Zheka
2003-04-24 16:51
2003.05.15
Настройка компиляции





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский