Page 1 of 1

Llamada a dll ActiveX creada con VB 6.0

Posted: 12 Dec 2018, 11:35
by jverdugocall
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:

Code: Select all

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:

Code: Select all

[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:

Code: Select all

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:

Code: Select all

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:

Code: Select all

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:

Code: Select all

"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.

Re: Llamada a dll ActiveX creada con VB 6.0

Posted: 12 Dec 2018, 18:00
by luis.vila
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