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
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Cargar una DLL
Cargar una DLL
José Ramón Castro.
- ignacio
- Site Admin
- Mensajes: 9463
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Cargar una DLL
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
>
>
>
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
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Cargar una DLL
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
>>
>>
>>
>
>
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
>>
>>
>>
>
>