jardineitor
18-08-2010, 17:06:36
Buenas, he sido lurker vuestro desde hace muuuucho tiempo y realmente leyendo el foro me habeis sacado de toda duda, peeeero, ahora tengo un problema del cual no salgo...
Entorno de trabajo:
Visual Basic .NET 2008 vs Delphi 7.
He hecho una dll en .NET, a modo de servidor COM, funciona de perlas, incluido en vb6, a excepcion de los eventos ...
En vb6 funcionan perfectamente, pero en delphi 7 no los dispara automaticamente, se ven, pero no se disparan...
ideas?
vamos a por el codigo:
Codigo de la DLL .NET (lo interesante claro)
General:
<Assembly: ClassInterface(ClassInterfaceType.None)>
Interface de las funciones/subs y demas:
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IClass1
<DispId(1)> Function InicioSygic(ByVal Ruta) As Integer
....
end interface
Interface del evento:
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IClass1Events
Sub elEvento(ByVal mensaje As String)
End Interface
Codigo restante:
<ComSourceInterfaces("ClassLibrary3.IClass1Events")> _
Public Class Class1
Inherits MarshalByRefObject
Implements IClass1
...
<ComVisible(False)> _
Public Delegate Sub elEventoHandler(ByVal mensaje As String)
Public Event elEvento As elEventoHandler
El sub que uso para ejecutar el evento:
Protected Sub OnElEvento(ByVal mensaje As String)
RaiseEvent elEvento(mensaje)
End Sub
Hasta aqui bien, pues ya digo que el vb6 la coge perfectamente y dispara el evento ...
Ahora codigo delphi:
Importo la libreria generando el Wrapper
en el _pas generado tengo esto:
// *************************************************//
// OLE Server Proxy class declaration
// Server Object : TClass1
// Help String :
// Default Interface: IClass1
// Def. Intf. DISP? : Yes
// Event Interface: IClass1Events
// TypeFlags : (2) CanCreate
// ***********************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
TClass1Properties= class;
{$ENDIF}
TClass1 = class(TOleServer)
private
FOnelEvento: TClass1elEvento;
FIntf: IClass1;
En el form principal del mi programa:
type
....
protected
procedure delphievento(Sender: const Value: WideString); <-Esto debe ser lo erroneo
Aqui la procedure para que cuando dispare lo reciba
procedure TForm1.delphievent(Sender: const Value: WideString); <- Y esto
begin
Memo1.Lines.Add(value);
end;
Resultado... el evento no dispara xD ..., alguna idea?
gracias anticipadas!
Entorno de trabajo:
Visual Basic .NET 2008 vs Delphi 7.
He hecho una dll en .NET, a modo de servidor COM, funciona de perlas, incluido en vb6, a excepcion de los eventos ...
En vb6 funcionan perfectamente, pero en delphi 7 no los dispara automaticamente, se ven, pero no se disparan...
ideas?
vamos a por el codigo:
Codigo de la DLL .NET (lo interesante claro)
General:
<Assembly: ClassInterface(ClassInterfaceType.None)>
Interface de las funciones/subs y demas:
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IClass1
<DispId(1)> Function InicioSygic(ByVal Ruta) As Integer
....
end interface
Interface del evento:
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IClass1Events
Sub elEvento(ByVal mensaje As String)
End Interface
Codigo restante:
<ComSourceInterfaces("ClassLibrary3.IClass1Events")> _
Public Class Class1
Inherits MarshalByRefObject
Implements IClass1
...
<ComVisible(False)> _
Public Delegate Sub elEventoHandler(ByVal mensaje As String)
Public Event elEvento As elEventoHandler
El sub que uso para ejecutar el evento:
Protected Sub OnElEvento(ByVal mensaje As String)
RaiseEvent elEvento(mensaje)
End Sub
Hasta aqui bien, pues ya digo que el vb6 la coge perfectamente y dispara el evento ...
Ahora codigo delphi:
Importo la libreria generando el Wrapper
en el _pas generado tengo esto:
// *************************************************//
// OLE Server Proxy class declaration
// Server Object : TClass1
// Help String :
// Default Interface: IClass1
// Def. Intf. DISP? : Yes
// Event Interface: IClass1Events
// TypeFlags : (2) CanCreate
// ***********************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
TClass1Properties= class;
{$ENDIF}
TClass1 = class(TOleServer)
private
FOnelEvento: TClass1elEvento;
FIntf: IClass1;
En el form principal del mi programa:
type
....
protected
procedure delphievento(Sender: const Value: WideString); <-Esto debe ser lo erroneo
Aqui la procedure para que cuando dispare lo reciba
procedure TForm1.delphievent(Sender: const Value: WideString); <- Y esto
begin
Memo1.Lines.Add(value);
end;
Resultado... el evento no dispara xD ..., alguna idea?
gracias anticipadas!