Delphi - Registrar OCX

 
Vista:

Registrar OCX

Publicado por sergio (3 intervenciones) el 24/03/2003 15:52:28
Queridos forista.. queria preguntar como puedo hacer pararegistrar un ocx desde mi aplicacion. por que hay veces que windows pierde el registro y cuando ejecuto mi app da un error. por que no se encuentra registrado el ocx.
como puedo solucionar ese problema?¡
mi idea es que deberia registrar el ocx mi sistema cada vez que lo ejecuto..
pero como lo logro..ademas de que no me muestre ningun mensaje de que se registro y esas cosas

muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Registrar OCX

Publicado por Ernesto D'Spirito (706 intervenciones) el 24/03/2003 16:49:15
Para registrar un OCX desde tu aplicación, tienes que cargarlo y ejecutar la función DllRegisterServer:

uses Windows, ActiveX;
...

var
Handle: THandle;
RegisterServer: TDllRegisterServer;
begin
Handle := LoadLibrary('C:\Windows\System\Archivo.OCX');
if Handle = 0 then
ShowMessage(SysErrorMessage(GetLastError))
else begin
RegisterServer := GetProcAddress(Handle, 'DllRegisterServer');
if not assigned(RegisterServer) then
ShowMessage(SysErrorMessage(GetLastError))
else
if RegisterServer <> nil then
ShowMessage('No se pudo registrar el control ActiveX');
FreeLibrary(Handle);
end;
end;

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Registrar OCX

Publicado por Ernesto D'Spirito (706 intervenciones) el 24/03/2003 16:49:19
Para registrar un OCX desde tu aplicación, tienes que cargarlo y ejecutar la función DllRegisterServer:

uses Windows, ActiveX;
...

var
Handle: THandle;
RegisterServer: TDllRegisterServer;
begin
Handle := LoadLibrary('C:\Windows\System\Archivo.OCX');
if Handle = 0 then
ShowMessage(SysErrorMessage(GetLastError))
else begin
RegisterServer := GetProcAddress(Handle, 'DllRegisterServer');
if not assigned(RegisterServer) then
ShowMessage(SysErrorMessage(GetLastError))
else
if RegisterServer <> nil then
ShowMessage('No se pudo registrar el control ActiveX');
FreeLibrary(Handle);
end;
end;

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Registrar OCX

Publicado por juan (1 intervención) el 24/03/2003 18:46:13
hola amigo
tengo una curiosidad sobre el ejemplo que pusiste
RegisterServer := GetProcAddress(Handle, 'DllRegisterServer');

yo pensaba que era asi
@RegisterServer := GetProcAddress(Handle, 'DllRegisterServer');

las dos formas son correctas?
gracias

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Registrar OCX

Publicado por Ernesto D'Spirito (706 intervenciones) el 24/03/2003 20:53:04
En ese caso es lo mismo, aunque a mí personalmente no me gusta porque la arroba da la idea que el lado izquierdo de la asignación es una dirección, y como tal no sería un "LVALUE", o sea, no sería asignable (fíjate que la sintaxis no funciona con punteros comunes), así que yo no lo hubiera permitido, pero los de Borland decidieron que en este caso particular el compilador lo permita y le de la misma semántica que sin la arroba, supongo que para clarificar que el nombre se trata de la direccion de la funcion y no de una llamada a la misma, aunque como te digo, a mí me parece obvio que en el caso de una asignación es así y que no se requiere clarificación alguna (es más, a mi entender, embarra más de lo que aclarara, pero bueno, cuestión de gustos).

Distinto es el caso en una expresión, donde la presencia o la ausencia de la arroba marca la diferencia en cuanto a la semántica:

if assigned(RegisterServer) then ....

es lo mismo que

if @RegisterServer <> nil then ....

Ambas comparan la dirección de la función con Nil, mientras que

if RegisterServer <> nil then ....

llama a la función apuntada por la variable RegisterServer y compara el valor devuelto por la misma con Nil. No es lo mismo.

Espero que se haya entendido.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar