Alaska Software Inc. - libreria en Visual C++
Username: Password:
AuthorTopic: libreria en Visual C++
Ernesto Avedillolibreria en Visual C++
on Mon, 20 Oct 2008 19:00:41 +0200
Hola a todos,
He adquirido una tarjeta pci que trae un driver para ser usado en Visual C++
No consigo acceder a l.
Lo que he hecho es incluir el LIB y el DLL en el directorio correspondiente 
y luego lo he llamado a la libreria mediante
#pragma Library( "adsapi32.lib" )

Sin embargo cuando quiero llamar una funcin definida en esta DLL no me la 
encuentra al lincar.

Hago algo mal? Hay algun truco?

Gracias
Ernesto
Pablo BotellaRe: libreria en Visual C++
on Mon, 20 Oct 2008 23:07:13 +0200
Hola

> y luego lo he llamado a la libreria mediante
> #pragma Library( "adsapi32.lib" )
Eso estaría bien si la librería estuviera hecha con o para Xbase++, pero obviamente no es el caso.

> Sin embargo cuando quiero llamar una función definida en esta DLL no me la 
> encuentra al lincar.
Y si se diera el caso de que la encuentra por casualidad, pues aun peor porque te reventaría el programa.
( Defino casualidad: La función está en mayusculas en la librería, no tiene decoracion, la libreria es del mismo tipo que genera el linker de VC++ 5)

> Hago algo mal? Hay algun truco?
Si, no sufras que la puedes usar sin problema, solo que vas a necesitar un poquito de trabajo extra,
bien usando 
DllCall() , DLL FUNCTION , DllPrepareCall()/DllExecuteCall() 
o bien usando las funciones y comandos del ot4xb que facilitan mucho las cosas y además es gratuito

Ahi te paso el enlace al tutorial que hice para la conferencia de Berlin del año pasado ahi explico un poco tanto usando DllCall() como con los comandos y funciones de ot4xb.
http://www.xbwin.com/download/WinApi_Tutor.zip

Saludos,
Pablo Botella
Ernesto AvedilloRe: libreria en Visual C++
on Tue, 28 Oct 2008 09:59:01 +0100
Hola pablo,
Verdaderamente, me ha parecido una libreria muy buena.
He tardado en contestar porque como nunca he programado en C++, me ha 
costado entender (y todavia hay cosas que no entiendo) como funciona.
Tengo una serie de preguntas que quizas me puedas responder,
Tengo que crear una estructura que en C++ es la siguiente,


typedef struct _DRIVERINFO
{
    struct      _DRIVERINFO far * pNext;   next device info. address
    ULONG       ulDeviceNum;               device number
    HGLOBAL     hDriverInfo;               driver info. handle
    USHORT      usUsageCount;              usage count
    HINSTANCE   hDriverInstance;           driver instance handle
    FARPROC     lpfnDriverEntry;           driver entry address
    LONG        hDeviceInfo;               deivce info. (Lock data)
}DRIVERINFO , FAR * LPDRIVERINFO;


Mi intencin es sustituirla por  el siguiente cdigo,

PROCEDURE Main
Public LPDRIVERINFO

LPDRIVERINFO := DRIVERINFO():New()

RETURN

Begin Structure _DRIVERINFO

    MEMBER WORD           ulDeviceNum;               device number  max 
255
    MEMBER BINSTR SIZE 128 hDriverInfo;               driver info. handle
    MEMBER DWORD          usUsageCount;              usage count
    MEMBER DWORD          hDriverInstance;           driver instance 
handle
    MEMBER DWORD64        lpfnDriverEntry;           driver entry address
    MEMBER DWORD64        hDeviceInfo;               deivce info. (Lock 
data)

End Structure

Begin Structure DRIVERINFO
    MEMBER @ _DRIVERINFO  pNext                      next device info. 
address
    MEMBER WORD           ulDeviceNum;               device number  max 
255
    MEMBER BINSTR SIZE 128 hDriverInfo;               driver info. handle
    MEMBER DWORD          usUsageCount;              usage count
    MEMBER DWORD          hDriverInstance;           driver instance 
handle
    MEMBER DWORD64        lpfnDriverEntry;           driver entry address
    MEMBER DWORD64        hDeviceInfo;               deivce info. (Lock 
data)

End Structure


Sera esto correcto?


Por otro lado , no he acabado de entender bien el concepto de DYNAMIC 
PROPERTY entre otras muchas cosas y lo que creo es que me faltan 
conocimientos de C++. Por eso he pensado que tendria que estudiar un poco 
mas sobre el tema y quisiera que me aconsejases alguna referencia donde 
aprender algo del tema.

Saludos
Ernesto Avedillo

"Pablo Botella" <pb_no_spam_@_remove_all_betwen_underscores_xbwin.com> 
escribi en el mensaje 
news:3620f200$69205f27$edf1@news.alaska-software.com...
Hola

> y luego lo he llamado a la libreria mediante
> #pragma Library( "adsapi32.lib" )
Eso estara bien si la librera estuviera hecha con o para Xbase++, pero 
obviamente no es el caso.

> Sin embargo cuando quiero llamar una funcin definida en esta DLL no me la
> encuentra al lincar.
Y si se diera el caso de que la encuentra por casualidad, pues aun peor 
porque te reventara el programa.
( Defino casualidad: La funcin est en mayusculas en la librera, no tiene 
decoracion, la libreria es del mismo tipo que genera el linker de VC++ 5)

> Hago algo mal? Hay algun truco?
Si, no sufras que la puedes usar sin problema, solo que vas a necesitar un 
poquito de trabajo extra,
bien usando
DllCall() , DLL FUNCTION , DllPrepareCall()/DllExecuteCall()
o bien usando las funciones y comandos del ot4xb que facilitan mucho las 
cosas y adems es gratuito

Ahi te paso el enlace al tutorial que hice para la conferencia de Berlin del 
ao pasado ahi explico un poco tanto usando DllCall() como con los comandos 
y funciones de ot4xb.
http://www.xbwin.com/download/WinApi_Tutor.zip

Saludos,
Pablo Botella
Pablo BotellaRe: libreria en Visual C++
on Mon, 03 Nov 2008 11:15:57 +0100
BEGIN STRUCTURE DRIVERINFO
   MEMBER DWORD       pNext
   MEMBER ULONG       ulDeviceNum
   MEMBER HANDLE      hDriverInfo
   MEMBER WORD        usUsageCount
   MEMBER WORD        wDummy    #pragma pack(push, 8) 
   MEMBER HANDLE      hDriverInstance
   MEMBER DWORD       lpfnDriverEntry
   MEMBER LONG        hDeviceInfo
END STRUCTURE