Viernes 8 de Noviembre de 2024, 13:51
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Usar Una Dll
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Usar Una Dll (Leído 1471 veces)
juancayuso
Nuevo Miembro
Mensajes: 16
Usar Una Dll
«
en:
Viernes 20 de Julio de 2007, 18:55 »
0
Hola a todos y a todas estoy usando una dll, concremente TotiPMSpeechRecognitionEngine.dll es de reconocimiento de voz, la cargo con
HMODULE dllHandle = LoadLibrary("TotiPMSpeechRecognitionEngine") sin problemas aparentes, y cuando voy a cargar una de las funciones uso el siguiente codigo:
typedef int (_stdcall * iniciaPTR)(HWND phandle,int a,string u[]);
iniciaPTR iniciar=(iniciaPTR)GetProcAddress(dllHandle, "IniciarUnitReconeixementDeSons");
,compruebo si ha devuelto NULL por si no la he cargado bien pero esta bien, y cuando la llamo con:
a=iniciar(phandle,2,ca); me devuelve el valor distinto de 0 y si es correcto debe devolver 0,
he cargado otras funciones con GetProcAddress y parece ser que sí me deja usarlas, así que no se si el problema será por los parámetros, el primer parametro es el handle de la ventana donde la uso, y lo he hallado así:
HWND phandle=FindWindow(NULL,"Mi Editor de texto"); y parece que es correcto
He buscado información en todos lados y no he encontrado la solucion, agradecería mucho a cualquiera que me echara una mano.
gracias adelantadas.
Tweet
daltomi
Nuevo Miembro
Mensajes: 19
Re: Usar Una Dll
«
Respuesta #1 en:
Sábado 21 de Julio de 2007, 01:56 »
0
Un ejemplo de implementación "más correcto" seria:
Código: Text
//lo tengo implementado en una clase asi que lo voy cortando.
#define PROC(s) GetProcAddress(m_hmodule,(s))
....
HMODULE m_hmodule;
.....
//como ves no defino el nombre de las variables.
INT (APIENTRY* m_pCompress)(HCOMPRESSOR,PBYTE,UINT,PBYTE*,UINT);
.....
// obtenemos la dir de la func
m_pCompress = INT(APIENTRY*)(HCOMPRESSOR,PBYTE,UINT,PBYTE*,UINT))PROC(("CompressText"));
....
//usamos la fuc
iret = m_pCompress(m_hcompress,pData,lsize,&pbData,USE_DEFAULT);
....
//no te olvides de liberar.
FreeLibrary(m_hmodule);
No se cual es especificamente el error de tu código, pero espero que si lo implementas de esta manera puedas solucionar tu probema. saludos.
juancayuso
Nuevo Miembro
Mensajes: 16
Re: Usar Una Dll
«
Respuesta #2 en:
Sábado 21 de Julio de 2007, 11:52 »
0
Ok, gracias Daltomi lo veré más despacio a ver si me soluciona los problemas
gracias.
Una cosa más, cuando hallo el handle de una ventana, me devuelve uno distinto cada vez que lo hago, no se si debería devolver siempre el mismo, como cuando caragas la dll que siempre devuelve el mismo.
thank!
daltomi
Nuevo Miembro
Mensajes: 19
Re: Usar Una Dll
«
Respuesta #3 en:
Sábado 21 de Julio de 2007, 21:21 »
0
Hola.
Cita de: ""juancayuso""
Una cosa más, cuando hallo el handle de una ventana, me devuelve uno distinto cada vez que lo hago,
Según documentación, la mejor forma de obtener el controlador de la ventana, en modo consola, es asi:
1-Tomar el titulo actual de tu ventana/aplicación.
2-Crear un nombre único en el sistema(uniquetitle)
3-Ingresar ese nombre único a tu ventana/aplicación.
4-Utilizar FindWindow para obtener el controlador de la ventana, utilizando el nombre único como parámetro.
5-Restaurar el titulo de tu ventana/aplicación.
Código: Text
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // buffer size for console window titles
HWND hwndFound; // this is what is returned to the caller
char pszNewWindowTitle[MY_BUFSIZE]; // contains fabricated WindowTitle
char pszOldWindowTitle[MY_BUFSIZE]; // contains original WindowTitle
// fetch current window title
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// format a "unique" NewWindowTitle
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// change current window title
SetConsoleTitle(pszNewWindowTitle);
// ensure window title has been updated
Sleep(40);
// look for NewWindowTitle
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// restore original window title
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
// Additional reference words: 3.10 3.50 4.00 95
// KBCategory: kbprg kbcode
// KBSubcategory: BseCon UsrWndw
Aún asi, se aclara lo siguiente:
The resulting HWND is not guaranteed to be suitable for all window handle
operations.
Saludos.
juancayuso
Nuevo Miembro
Mensajes: 16
Re: Usar Una Dll
«
Respuesta #4 en:
Martes 24 de Julio de 2007, 18:01 »
0
Gracias de nuevo Daltomi,yo estoy trabajando con Builder c++, y los ejemplos que he visto lo hacen más sencillo, sólo con Findwindow(), y pasando como paraetro la clase a la que pretenece la ventana y el caption de la ventana,
pregunto esto de builder aquí porque en el apartado del foro de Builder no me responden,
ahora voy a intentar hacer unas hebras para que se ejecute paralelamente al programa principal, que tambien me están dando problemas,
Si controlas de hebras o de GetMessage para que una ventana recibe un mensage en builder contesta si no es mucha molestia y pongo aquí mis dudas,
Gracias,saludos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Usar Una Dll