Llamada a dll ActiveX creada con VB 6.0

Responder
jverdugocall
Mensajes: 1
Registrado: 21 Oct 2016, 13:08

Llamada a dll ActiveX creada con VB 6.0

Mensaje por jverdugocall » 12 Dic 2018, 11:35

Buenos días,

Necesito llamar desde Uniface 9.7.04 a una dll ActiveX creada con VB 6.0.

Según la ayuda de Uniface tengo que crear una signature COM. He intentado recrear el siguiente ejemplo de la ayuda pero no lo consigo:

Código: Seleccionar todo

Call a Visual Basic object that returns a value 1

The assignment file contains the following setting: 

KURB040VB = $COM:KURB040VB CLASS=KURBTESTSVB.KURB040VB
The signature for the service KURB040VB contains the following definitions: 

Implementation: COM;
operation: COM_1;
parameter: VALUE (numeric, out)
Form KURB040, Button Visual Basic, Detail trigger: 

newinstance "kurb040vb", kurb040vb
variables
Handle kurb040uf
endvariables
kurb040vb->com_1(u_return)
Visual Basic code: 

Public Function com_1(value As Long) As Long
Open "kurb040vb.log" For Append As #1
Write #1, Now
Write #1, "Case 2: kurbtestsvb.kurb040vb.com_1 called"
value = 1
com_1 = 0
Close #1
End Function
Los pasos que he realizado han sido los siguientes:

1. He añadido en el fichero asn lo siguiente:

Código: Seleccionar todo

[PATHS]
...
$COM=COM:

[SERVICES_EXEC]
KURB040VB = $COM:KURB040VB CLASS=KURBTESTSVB.KURB040VB
2. Creo proyecto en VB 6.0 llamado KURBTESTSVB.vbp con la clase del ejemplo KURB040VB.cls. La función como en el ejemplo es la siguiente:

Código: Seleccionar todo

Public Function com_1(value As Long) As Long
Open "kurb040vb.log" For Append As #1
Write #1, Now
Write #1, "Case 2: kurbtestsvb.kurb040vb.com_1 called"
value = 1
com_1 = 0
Close #1
End Function
Creo KURBTESTSVB.dll a partir del proyecto anterior. La copio en C:\Windows y la registro (tanto en 32 como en 64 bits)

3. Creo signature en Uniface como indica el ejemplo:

Código: Seleccionar todo

Signature KURB040VB; Implementation: COM; operation: COM_1; parameter: VALUE (numeric, out)
4. En un formulario de mi aplicación llamo a la dll con el siguiente código:

Código: Seleccionar todo

variables
   handle kurb040vb
   numeric u_return
endvariables

newinstance "kurb040vb", kurb040vb
kurb040vb->com_1(u_return)
Sin embargo, a la hora de ejecutarse el newinstance obtengo el siguiente error:

Código: Seleccionar todo

"ERROR=-150·;
MNEM=<UACTERR_UNKNOWN>·;
DESCRIPTION=Activation error occurred·;
COMPONENT=SES_MANAGER·;
PROCNAME=12\DTLF·;
TRIGGER=DTLF·;
LINE=2·;
ADDITIONAL=COMPONENTNAME=KURB040VB·!·;
  INSTANCENAME="
¿Alguna idea?

Gracias de antemano y un saludo.

luis.vila
Mensajes: 192
Registrado: 17 Sep 2011, 12:46

Re: Llamada a dll ActiveX creada con VB 6.0

Mensaje por luis.vila » 12 Dic 2018, 18:00

No estoy muy ducho en la materia, vaya eso por delante.

Entiendo que si te da el -150 es que realmente sí tienes la signature creada. Esta era mi principal duda porque esperaba algo con /sti mwr=COM pero entiendo que el ejemplo indica que se cree manualmente. En este punto los tipo Variant suelen ser problemáticos.

Los -150 suelen ser más explícitos, la verdad. En este caso no ayuda en nada.

Te recomiendo que pongas $ioprint=64 y, espero que te salga algún mensaje que ayude más. Quizás no encuentre el VisualBasic

$status=0 ; se acabaron los problemas

Responder