PDA

Ver la Versión Completa : Problema con una Dll COM y delphi 7


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!

jardineitor
18-08-2010, 19:15:53
vale... cambios en el codigo delphi (que tampoco van, pero se lo traga...)


en el main:
PROTECTED
PROCEDURE eventodelphi(sender: Tclass1elevento);

.....................................

en el codigo
PROCEDURE TF_Arranque.eventodelphi(sender: Tclass1elevento);
VAR
lalala, mensaje: widestring;
BEGIN
showmessage('funciona');
END;


y no pasa por ahi... porque?

jardineitor
20-08-2010, 17:06:25
Nada... ni montado SOLO un interface ni leches... en delphi 7 no dispara el evento...