softruz wrote:Muy buenas, estoy intentado hacer un wrapper a las funciones de una DLL, mi problema es que no me funcionan importando las funciones directamente de la DLL, entonces creando el wrapper tengo un problema, ya tengo la .lib importada con implib de Borland C++, mi codigo es este:
#pragma BEGINDUMP
HB_FUNC(OPENDEVICE)
{
long CardAddress;
long lReturn;
CardAddress = hb_parni(1);
lReturn = OpenDevice(CardAddress);
hb_retnl(lReturn);
}
#pragma ENDDUMP
pero a la hora de compilar y linkar mi .prg me da el siguiente error:
CdiPLC.c:
Warning W8065 CdiPLC.prg 51: Call to function 'OpenDevice' with no prototype in function HB_FUN_OPENDEVICE
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_OpenDevice' referenced from Z:\SOFTWARE\FWH809\PROJECT\CDIPLC\FUE\CDIPLC.OBJ
- Aplicacion completamente construida.
¿ Sabeis por que puede ser? La funcion Opendevice esté en el .DLL
Un Saludo.
#pragma BEGINDUMP
LONG OpenDevice( INT CardAddress );
HB_FUNC(MIOPENDEVICE)
{
int CardAddress;
long lReturn;
CardAddress = hb_parni(1);
lReturn = OpenDevice(CardAddress);
hb_retnl(lReturn);
}
#pragma ENDDUMP
#pragma BEGINDUMP
#include <hbapi.h>
LONG pascal OpenDevice( int CardAddress );
HB_FUNC(MIOPENDEVICE)
{
int CardAddress;
long lReturn;
CardAddress = hb_parni(1);
lReturn = OpenDevice(CardAddress);
hb_retnl(lReturn);
}
#pragma ENDDUMP
softruz wrote:Muy buenas Antonio, lo he probado pero no consigo realizarlo, me da el siguiente error al linkar
Error: Unresolved external 'OPENDEVICE' referenced from Z:\SOFTWARE\FWH809\PROJECT\CDIPLC\FUE\CDIPLC.OBJ
si alguien puede poner un ejemplo completo de hacer un wrapper de funciones de DLL y utilizarlas, se lo agradecería.
Un Saludo.
function Main()
MiOpenDevice()
return nil
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
LONG WINAPI OpenDevice( int CardAddress );
HB_FUNC( MIOPENDEVICE )
{
int CardAddress;
long lReturn;
CardAddress = hb_parni(1);
lReturn = OpenDevice(CardAddress);
hb_retnl(lReturn);
}
#pragma ENDDUMP
Antonio Linares wrote:Juan,
Asi funciona bien
Habia que usar WINAPI en vez de pascal
Antonio Linares wrote:Carlos,
> Cómo sabes que debes usar WINAPI? Qué te lo indica?
Que el simbolo que exporta la DLL usa mayusculas y minusculas y que no lleva subrayado delante.
Si llevase subrayado delante, entonces significa que es una funcion estandard en C.
Si fuese todo en mayusculas, y sin subrayado, significa que es pascal.
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 48 guests