Power Builder - llamada a dll, MalditasDlls.dll

 
Vista:

llamada a dll, MalditasDlls.dll

Publicado por jose (86 intervenciones) el 24/11/2009 11:28:38
Buenas, tengo la dll malditasdlls.dll, la tengo registrada, copiada en c:\ y en system32.

La dll tiene un unico procedimiento que recibe tres argumentos tipo string y muestra un mensaje.

NO consigo hacer la llamada sin que haya fallo de codigo!!!!!,

El codgo de la llamada es el siguiente:

OLEObject PBObject, PBNVObject
long ll_status

PBObject = CREATE OLEObject

ll_status = PBObject.ConnectToNewObject ("MalditasDlls.class1")

IF ll_status <> 0 THEN
MessageBox("Error", String(ll_status))
Return

ELSE

PBObject.LibraryList = "MalditasDlls.dll"
PBObject.MachineCode = TRUE

PBNVObject = CREATE OLEObject

PBNVObject = PBObject.CreateObject("Class1")
IF IsNull(PBNVObject) THEN
MessageBox("Error", "Objeto Nulo")
Return
ELSE

PBNVObject.MensajeDeCaca ('Hola mundo', 'otra prueba', 'Pulsa')

END IF

DESTROY PBNVObject
PBObject.DisconnectObject( )
END IF

DESTROY PBObject

Alguien sabe como decirme la llamada al procedimiento desde PowerBuilder???

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:llamada a dll, MalditasDlls.dll

Publicado por anonimo (108 intervenciones) el 24/11/2009 13:23:48
intenta declarar la función / procedimiento como una función externa en vez de usar ole. Una vez declarada, la puedes llamar como si fuera cualquier función.
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:llamada a dll, MalditasDlls.dll

Publicado por jose (86 intervenciones) el 24/11/2009 14:51:52
Buenas, ya he probado tambien:

SUBROUTINE MensajeDeCaca(String TituloDll, String MesajeDll, String titulokkkk) LIBRARY "MalditasDLLs.dll"

Al realizar la llamada:

MensajeDeCaca ('Hola mundo', '¿Por qué este sí funciona?', 'Pulsa')

Pero falla, el error es:

Número de error 21.
Texto de error = Bad runtime function reference at line 40 in clicked event of object cb_dll of uo_mi_prueba..
Ventana/Menú/Objeto = uo_mi_prueba
Objeto de error/Control = cb_dll.
Código = clicked.
Línea en código = 40.

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:llamada a dll, MalditasDlls.dll

Publicado por miguell (108 intervenciones) el 24/11/2009 16:02:19
si quieres mándame el código y lo probaré.

la dll está creado cómo (con qué programa)?
estás seguro que la declaración es correcta (no será que uno de los argumentos es un pointer o sea que tengas que usar REF)?
lo puedes llamar correctamente desde por ejemplo visualbasic?
estás seguro que está correctamente compilado la dll (es vuestro o de un tercero?)

mjlreina38 hotmail com
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:llamada a dll, MalditasDlls.dll

Publicado por samuel (52 intervenciones) el 24/11/2009 18:40:06
¿probaste copiando la dll en la misma carpeta que la pbl?
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:llamada a dll, MalditasDlls.dll

Publicado por jose (86 intervenciones) el 24/11/2009 19:28:01
No, eso no lo he probado, la he copiado en c:\ y en system32, ademas de realizar el registro de la dll (el cual ha ido correcto).

Pruebo y te comento.

Saludos
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:llamada a dll, MalditasDlls.dll

Publicado por miguell (108 intervenciones) el 24/11/2009 23:12:01
estaría bien hacer un buen 'whitepaper' / documento sobre cómo hacer una dll con visual basic / c++ que cumpla todos los requerimientos. Hablando con José me ha parecido posible que es porque no está del todo bien la dll que tiene de ejemplos. Si alguién tiene experiencia .... que lo diga. Cuando tengo la info lo postearé.
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:llamada a dll, MalditasDlls.dll

Publicado por miguell (108 intervenciones) el 08/12/2009 17:19:35
aquí hay una solución: (no sé que le pasará a malditas.dll pero algo no está del todo bien).
-------------
hola José,

por fin he conseguido hacer las cosas con DLL's visual basic:
si siguies los pasos descrito en

1) con visual basic 6.0:
http://www.elguruprogramador.com.ar/articulos/crear-una-dll-con-visual-basic.htm

2)
registras la dll con "regsvr32.exe project1.dll"

3)
luego puedes llamar desde powerbuilder con este código a la dll:
-----------------------------------------------------------------------------------------
OleObject loo
string ls_titulo, ls_mensaje

loo = create oleobject
li_rc = loo.ConnectToNewObject("Project1.Class1") // lo suyo sería cambiar los //nombres por defecto al crear el proyecto de la dll pero bueo, sigo el ejemplo

IF li_rc < 0 THEN
DESTROY loo
MessageBox("Connecting to COM Object Failed", "Error: " + String(li_rc))
Return
END IF

// Perform some work with the COM object
ls_titulo = 'El título del Mensaje'
ls_mensaje = 'Esto es mi texto del mensaje.'
loo.MostrarMensaje( ref ls_titulo, ref ls_mensaje) // son por referencia por defecto en //visual basic

loo.DisconnectObject()
destroy loo
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