Página 1 de 1

Cargar una DLL

Publicado: Mar Oct 04, 2005 9:47 am
por jrcpoli
Saludos:
Es posible actualmente cagar dinamicamente una DLL y usar sus clases, si
es así lo puedo hacer con LoadLib o cual es la instrucción para hacerlo.
José Ramón Castro Polinio

Cargar una DLL

Publicado: Mar Oct 04, 2005 11:20 am
por ignacio
José,
Esa es una funcionalidad de XHarbour. Por ejemplo:
[c:xharbourxharbourcontribwhat32examplesimports.prg]
#include "c:what32includeimport.ch"
#Include "c:what32includeWinTypes.ch"
STATIC USER32
STATIC GDI32
STATIC COMCTL32
STATIC KERNEL32
STATIC WINSPOOL
STATIC WINMM
INIT PROCEDURE LoadLibs()
USER32 := LoadLibrary("USER32")
GDI32 := LoadLibrary("GDI32")
COMCTL32 := LoadLibrary("COMCTL32")
KERNEL32 := LoadLibrary("Kernel32")
WINSPOOL := LoadLibrary("WINSPOOL.DRV")
WINMM := LoadLibrary("WINMM")
RETURN
EXIT PROCEDURE FreeLibs
FreeLibrary(USER32)
FreeLibrary(GDI32)
FreeLibrary(COMCTL32)
FreeLibrary(KERNEL32)
FreeLibrary(WINSPOOL)
FreeLibrary(WINMM)
RETURN
// MCI
#define MCIERROR DWORD
#define MCIDEVICEID UINT
IMPORT WINMM FUNCTION BOOL mciExecute(LPCSTR cCmd ) // obsolete
IMPORT WINMM FUNCTION BOOL mciSendStringA(LPCSTR lpstrCommand, LPSTR
lpstrReturnString, UINT uReturnLength, HWND hwndCallback) AS mciSendString
IMPORT WINMM FUNCTION BOOL sndPlaySoundA(LPCSTR pszSound, UINT
fuSound) AS sndPlaySound
IMPORT WINMM FUNCTION MCIERROR mciSendCommandA(MCIDEVICEID mciId, UINT
uMsg, DWORD dwParam1, DWORD dwParam2) AS mciSendCommand
IMPORT WINMM FUNCTION MCIDEVICEID mciGetDeviceIDA(LPCSTR pszDevice) AS
mciGetDeviceID
IMPORT WINMM FUNCTION MCIDEVICEID mciGetDeviceIDFromElementIDA(DWORD
dwElementID, LPCSTR lpstrType ) AS mciGetDeviceIDFromElementID
IMPORT WINMM FUNCTION BOOL mciGetErrorStringA(MCIERROR mcierr, LPSTR
pszText, UINT cchText) AS mciGetErrorString
// SPOOLER
IMPORT WINSPOOL FUNCTION BOOL ClosePrinter( HANDLE hPrinter )
IMPORT WINSPOOL FUNCTION BOOL EndDocPrinter(HANDLE hPrinter)
IMPORT WINSPOOL FUNCTION BOOL EndPagePrinter(HANDLE hPrinter)
También lo puedes hacer sin comandos:
function sndPlaySoundA( pszSound,fuSound )
STATIC c hLib
STATIC nProcAddr
IF nProcAddr == NIL
hLib :=Loadlibrary( "WINMM" )
nProcAddr :=GetProcAddress( hLib, "sndPlaySoundA" )
ENDIF
Return CallDLL( hLib, nProcAddr,, 8, 10, pszSound, -3, fuSound )
// CallDll( hInstDLL, pFunctAddr, nFlags, nRetType, nParmType1,;
// xParm1, nParmType2, xParm2, nParmTypeN, xParmN)
Un saludo,
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:[email=43423395@ozsrvnegro.ozlan.local...]43423395@ozsrvnegro.ozlan.local...[/email]
> Saludos:
> Es posible actualmente cagar dinamicamente una DLL y usar sus clases,
> si
> es así lo puedo hacer con LoadLib o cual es la instrucción para hacerlo.
>
> José Ramón Castro Polinio
>
>
>

Cargar una DLL

Publicado: Sab Dic 02, 2006 7:35 am
por Fernando Hernandez
Estaba viendo el ejercicio para usar LOADLIBRARY, luego el GETPROCADDRESS,
hasta ahi todo bien, pero cuando ejecuto el CALLDLL me da error, tengo que
agregar alguna otra libreria
Gracias por la ayuda
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:61_43424940$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> José,
>
> Esa es una funcionalidad de XHarbour. Por ejemplo:
>
> [c:xharbourxharbourcontribwhat32examplesimports.prg]
>
> #include "c:what32includeimport.ch"
> #Include "c:what32includeWinTypes.ch"
>
>
> STATIC USER32
> STATIC GDI32
> STATIC COMCTL32
> STATIC KERNEL32
> STATIC WINSPOOL
> STATIC WINMM
>
> INIT PROCEDURE LoadLibs()
> USER32 := LoadLibrary("USER32")
> GDI32 := LoadLibrary("GDI32")
> COMCTL32 := LoadLibrary("COMCTL32")
> KERNEL32 := LoadLibrary("Kernel32")
> WINSPOOL := LoadLibrary("WINSPOOL.DRV")
> WINMM := LoadLibrary("WINMM")
> RETURN
>
> EXIT PROCEDURE FreeLibs
> FreeLibrary(USER32)
> FreeLibrary(GDI32)
> FreeLibrary(COMCTL32)
> FreeLibrary(KERNEL32)
> FreeLibrary(WINSPOOL)
> FreeLibrary(WINMM)
> RETURN
>
> // MCI
>
> #define MCIERROR DWORD
> #define MCIDEVICEID UINT
>
> IMPORT WINMM FUNCTION BOOL mciExecute(LPCSTR cCmd ) // obsolete
> IMPORT WINMM FUNCTION BOOL mciSendStringA(LPCSTR lpstrCommand,
> LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback) AS
> mciSendString
> IMPORT WINMM FUNCTION BOOL sndPlaySoundA(LPCSTR pszSound, UINT
> fuSound) AS sndPlaySound
> IMPORT WINMM FUNCTION MCIERROR mciSendCommandA(MCIDEVICEID mciId, UINT
> uMsg, DWORD dwParam1, DWORD dwParam2) AS mciSendCommand
> IMPORT WINMM FUNCTION MCIDEVICEID mciGetDeviceIDA(LPCSTR pszDevice) AS
> mciGetDeviceID
> IMPORT WINMM FUNCTION MCIDEVICEID mciGetDeviceIDFromElementIDA(DWORD
> dwElementID, LPCSTR lpstrType ) AS mciGetDeviceIDFromElementID
> IMPORT WINMM FUNCTION BOOL mciGetErrorStringA(MCIERROR mcierr,
> LPSTR pszText, UINT cchText) AS mciGetErrorString
>
> // SPOOLER
>
> IMPORT WINSPOOL FUNCTION BOOL ClosePrinter( HANDLE hPrinter )
> IMPORT WINSPOOL FUNCTION BOOL EndDocPrinter(HANDLE hPrinter)
> IMPORT WINSPOOL FUNCTION BOOL EndPagePrinter(HANDLE hPrinter)
>
> También lo puedes hacer sin comandos:
>
> function sndPlaySoundA( pszSound,fuSound )
>
> STATIC c hLib
> STATIC nProcAddr
>
> IF nProcAddr == NIL
> hLib :=Loadlibrary( "WINMM" )
> nProcAddr :=GetProcAddress( hLib, "sndPlaySoundA" )
> ENDIF
>
> Return CallDLL( hLib, nProcAddr,, 8, 10, pszSound, -3, fuSound )
>
> // CallDll( hInstDLL, pFunctAddr, nFlags, nRetType, nParmType1,;
> // xParm1, nParmType2, xParm2, nParmTypeN, xParmN)
>
> Un saludo,
>
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:[email=43423395@ozsrvnegro.ozlan.local...]43423395@ozsrvnegro.ozlan.local...[/email]
>> Saludos:
>> Es posible actualmente cagar dinamicamente una DLL y usar sus clases,
>> si
>> es así lo puedo hacer con LoadLib o cual es la instrucción para hacerlo.
>>
>> José Ramón Castro Polinio
>>
>>
>>
>
>