Page 1 of 1

DLL.CH y LoadLibrary error

PostPosted: Tue Mar 28, 2017 7:20 pm
by devtuxtla
Hola Antonio

Analizando el problema de los DLL, me encuentro que la funcion LoadLibrary regresa un valor como apuntador del tipo 0xFDB0000
Cuando este valor es analizado por la funcion ABS genera ERROR...

este es parte del codigo del dll.ch

Code: Select all  Expand view

#xcommand DLL [<static:STATIC>] FUNCTION <FuncName>( [ <uParam1> AS <type1> ] ;
                                                     [, <uParamN> AS <typeN> ] ) ;
             AS <return> [<pascal:PASCAL>] [ FROM <SymName> ] LIB <*DllName*> ;
       => ;
          [<static>] function <FuncName>( [NOREF(<uParam1>)] [,NOREF(<uParamN>)] ) ;;
             local _hDLL := If( ValType( <DllName> ) == "N", <DllName>, LoadLibrary( <(DllName)> ) ) ;;
             local uResult ;;
             local cFarProc ;;
             if Abs( _hDLL ) > 32 ;;  <------- AQUI GENERA EL ERROR
                cFarProc = GetProcAdd( _hDLL,;
                If( [ Empty( <SymName> ) == ] .t., <(FuncName)>, <SymName> ),;
                [<.pascal.>], <return> [,<type1>] [,<typeN>] ) ;;
                uResult = FWCallDLL( cFarProc [,<uParam1>] [,<uParamN>] ) ;;
                If( ValType( <DllName> ) == "N",, FreeLibrary( _hDLL ) ) ;;
             else ;;
                MsgAlert( "Error code: " + LTrim( Str( _hDLL ) ) + " loading " + ;
                If( ValType( <DllName> ) == "C", <DllName>, Str( <DllName> ) ) ) ;;
             end ;;
          return uResult
 


Alguna sugerencia para corregir este problema?

Saludos

fwh17.02

Re: DLL.CH y LoadLibrary error

PostPosted: Tue Mar 28, 2017 9:30 pm
by Antonio Linares
parece que estás enlazando una función LoadLibrary() que no es la de FWH

Re: DLL.CH y LoadLibrary error

PostPosted: Tue Mar 28, 2017 9:43 pm
by carlos vargas
ok, existe un problema, tanto xharbour como harbour, tiene las funciones LoadLibrary nativas, estas retorna un puntero si la carga fue exitosa,
en fwh, existe esa misma funcion pero esta retorna un entero, y esto es un problema si se altera de alguna forma la construccion de el ejecutable y
por alguna razon la funcion que se esta linkeando en el exe es la de xharbour o harbour, ya que en esa instruccion

if Abs( _hDLL ) > 32

la funcion Abs fallara, ya que ella espera un entero, y puede que sea un puntero.

tienes que asegurarte que se este cargando la libreria de fwh en primer lugar, antes de las de [x]Harbour, para descartar este problema.

ahora tu dices que te da error en esa linea exactamente, muestra el log, por que hi se muestra de que tipo en el parametro recibido por la funcion Abs, y ahi salimos de dudas.

salu2

Re: DLL.CH y LoadLibrary error

PostPosted: Wed Mar 29, 2017 3:26 am
by devtuxtla
Hola Antonio / carlos

Gracias por contestar

Para resolver este problema de la DLL's di un paso a tras...

Generé la aplicacion con la version de FWH17.02 , xHarbour 1.2.3. (Build 20161218) y BCC 7.0

Y problema resuelto... los metodos de las DLL's se ejecutan bien...

Tal vez es necesario esperar una poco antes de usar BCC 7.2, aun que no se si es quien causa el problema.

Saludos

Re: DLL.CH y LoadLibrary error

PostPosted: Wed Mar 29, 2017 8:37 am
by Antonio Linares
Como te ha indicado Carlos:

tienes que asegurarte que se este cargando la libreria de fwh en primer lugar, antes de las de [x]Harbour, para descartar este problema


Esa es la razón. Revísalo