Listar funções de uma DLL
Moderador: Moderadores
Listar funções de uma DLL
Olá,
Alguém sabe se é possível, através do harbour, listar as funções que estão contidas em uma determinada DLL ?
Obrigado,
Alguém sabe se é possível, através do harbour, listar as funções que estão contidas em uma determinada DLL ?
Obrigado,
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Listar funções de uma DLL
Não dá pra conseguir com o fabricante?
Às vezes tem restrições, ou conversão de dados que impedem o uso, mesmo sabendo os nomes.
Só de tipos numéricos, devem existir mais de 10 tipos diferentes.
E pode ser necessário passar o parâmetro como valor ou como pointer (por referência), ou com tamanho específico no caso de strings.
Às vezes tem restrições, ou conversão de dados que impedem o uso, mesmo sabendo os nomes.
Só de tipos numéricos, devem existir mais de 10 tipos diferentes.
E pode ser necessário passar o parâmetro como valor ou como pointer (por referência), ou com tamanho específico no caso de strings.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Listar funções de uma DLL
Olá José,
Meu intuito é conseguir esta lista de uma DLL criada por mim mesmo em harbour.
Eu queria saber se além das minhas funções o harbour acrescenta alguma função extra dentro da DLL.
Obrigado,
Meu intuito é conseguir esta lista de uma DLL criada por mim mesmo em harbour.
Eu queria saber se além das minhas funções o harbour acrescenta alguma função extra dentro da DLL.
Obrigado,
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Listar funções de uma DLL
Neste caso é possível sim, existe um aplicativo chamado depends.exe (google it!) que lista todas as funções exportadas por usa .DLL além de todas as .DLL que foram linkadas diretamente junto ao executável (excetua-se as que são carregadas via loadlibrary pelo programador). Roda com .DLLs e tabmém com .EXEs.Eu queria saber se além das minhas funções o harbour acrescenta alguma função extra dentro da DLL.
Espero ter ajudado.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Listar funções de uma DLL
Olá Vailton,
Como vão as coisas aí em sampa ?
Olha instalei o dependency Walker aqui e chamei direto a minha Dll e consegui as funções que estão linkadas nela.
Valeu pela dica e grande abraço pra turma aí
Rossine.
Como vão as coisas aí em sampa ?
Olha instalei o dependency Walker aqui e chamei direto a minha Dll e consegui as funções que estão linkadas nela.
Valeu pela dica e grande abraço pra turma aí
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Listar funções de uma DLL
En HMG oficial existe la funcion escrita en C:
HMG_GetDLLFunctions ()
Returns an array with all functions names from specific DLL file
Useful function to retrieves functions name in DLL files.
HMG_GetDLLFunctions( cDllName ) --> return array { cFuncName1, cFuncName2, ... }
Buscar en la carpeta Source el código fuente de esta función. En este momento no recuerdo en cuál archivo está definido, pero lo pueden encontrar fácilmente buscando por ej. Con Notepad++, con la opción find in Files.
HMG_GetDLLFunctions ()
Returns an array with all functions names from specific DLL file
Useful function to retrieves functions name in DLL files.
HMG_GetDLLFunctions( cDllName ) --> return array { cFuncName1, cFuncName2, ... }
Buscar en la carpeta Source el código fuente de esta función. En este momento no recuerdo en cuál archivo está definido, pero lo pueden encontrar fácilmente buscando por ej. Con Notepad++, con la opción find in Files.
Listar funções de uma DLL
Olá Claudio Soto,
Primeiramente muito obrigado por responder e com suas dicas eu consegui fazer o que eu precisava.
Montei um código de teste que mostro abaixo:
Obs: Claudio eu consegui compilar e executar o código abaixo normalmente mas ele está correto ?
Mais uma vez, muito obrigado,
Primeiramente muito obrigado por responder e com suas dicas eu consegui fazer o que eu precisava.
Montei um código de teste que mostro abaixo:
Obs: Claudio eu consegui compilar e executar o código abaixo normalmente mas ele está correto ?
Código: Selecionar todos
function main( cDll )
cls
? hb_valtoexp( HMG_GetDLLFunctions( cDll ) )
return NIL
#pragma BEGINDUMP
#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>
#include <psapi.h>
#include <tchar.h>
//#include <winreg.h>
//#include <uxtheme.h>
#include <imagehlp.h>
#include "hbapiitm.h"
#include "hbapi.h"
#include "hbapifs.h"
/*****************************************************************************************
* MACRO DEFINITION FOR CALL DLL FUNCTION
******************************************************************************************/
#define HMG_DEFINE_DLL_FUNC(\
_FUNC_NAME, \
_DLL_LIBNAME, \
_DLL_FUNC_RET, \
_DLL_FUNC_TYPE, \
_DLL_FUNC_NAMESTRINGAW, \
_DLL_FUNC_PARAM, \
_DLL_FUNC_CALLPARAM, \
_DLL_FUNC_RETFAILCALL \
)\
\
_DLL_FUNC_RET _DLL_FUNC_TYPE _FUNC_NAME _DLL_FUNC_PARAM \
{\
typedef _DLL_FUNC_RET (_DLL_FUNC_TYPE *PFUNC) _DLL_FUNC_PARAM;\
static PFUNC pfunc = NULL;\
if (pfunc == NULL)\
{\
HMODULE hLib = LoadLibrary (_TEXT (_DLL_LIBNAME) );\
pfunc = (PFUNC) GetProcAddress (hLib, _DLL_FUNC_NAMESTRINGAW);\
}\
if(pfunc == NULL)\
return ((_DLL_FUNC_RET) _DLL_FUNC_RETFAILCALL);\
else\
return pfunc _DLL_FUNC_CALLPARAM;\
}
HMG_DEFINE_DLL_FUNC ( win_Shell_GetImageLists, // user function name
"Shell32.dll", // dll name
BOOL, // function return type
WINAPI, // function type
"Shell_GetImageLists", // dll function name
(HIMAGELIST *phimlLarge, HIMAGELIST *phimlSmall), // dll function parameters (types and names)
(phimlLarge, phimlSmall), // function parameters (only names)
FALSE // return value if fail call function of dll
)
//********************************
// by Dr. Claudio Soto, June 2015
//********************************
HMG_DEFINE_DLL_FUNC ( win_MapAndLoad, // user function name
"Imagehlp.dll", // dll name
WINBOOL, // function return type
WINAPI, // function type
"MapAndLoad", // dll function name
(PCSTR ImageName, PCSTR DllPath, PLOADED_IMAGE LoadedImage, WINBOOL DotDll, WINBOOL ReadOnly), // dll function parameters (types and names)
(ImageName, DllPath, LoadedImage, DotDll, ReadOnly), // function parameters (only names)
FALSE // return value if fail call function of dll
)
HMG_DEFINE_DLL_FUNC ( win_UnMapAndLoad, // user function name
"Imagehlp.dll", // dll name
WINBOOL, // function return type
WINAPI, // function type
"UnMapAndLoad", // dll function name
(PLOADED_IMAGE LoadedImage), // dll function parameters (types and names)
(LoadedImage), // function parameters (only names)
FALSE // return value if fail call function of dll
)
HMG_DEFINE_DLL_FUNC ( win_ImageDirectoryEntryToData, // user function name
"Dbghelp.dll", // dll name
PVOID, // function return type
WINAPI, // function type
"ImageDirectoryEntryToData", // dll function name
(PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size), // dll function parameters (types and names)
(Base, MappedAsImage, DirectoryEntry, Size), // function parameters (only names)
NULL // return value if fail call function of dll
)
HMG_DEFINE_DLL_FUNC ( win_ImageRvaToVa, // user function name
"Dbghelp.dll", // dll name
PVOID, // function return type
WINAPI, // function type
"ImageRvaToVa", // dll function name
(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection), // dll function parameters (types and names)
(NtHeaders, Base, Rva, LastRvaSection), // function parameters (only names)
NULL // return value if fail call function of dll
)
// HMG_GetDLLFunctions( cDllName ) --> return array { cFuncName1, cFuncName2, ... }
HB_FUNC ( HMG_GETDLLFUNCTIONS )
{
CHAR *cDllName = (CHAR *) hb_parc (1);
DWORD *dNameRVAs = NULL;
LOADED_IMAGE LI;
IMAGE_EXPORT_DIRECTORY *IED;
ULONG DirSize;
CHAR *cFuncName;
if ( win_MapAndLoad (cDllName, NULL, &LI, TRUE, TRUE) )
{
IED = (IMAGE_EXPORT_DIRECTORY *) win_ImageDirectoryEntryToData (LI.MappedAddress, FALSE, IMAGE_DIRECTORY_ENTRY_EXPORT, &DirSize);
if (IED != NULL)
{
dNameRVAs = (DWORD *) win_ImageRvaToVa (LI.FileHeader, LI.MappedAddress, IED->AddressOfNames, NULL);
ULONG i;
hb_reta ( IED->NumberOfNames );
for(i = 0; i < IED->NumberOfNames; i++)
{
cFuncName = (CHAR *) win_ImageRvaToVa (LI.FileHeader, LI.MappedAddress, dNameRVAs[i], NULL);
hb_storvc ( cFuncName, -1, i + 1 );
}
}
win_UnMapAndLoad (&LI);
}
}
#pragma ENDDUMP
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Listar funções de uma DLL
A simple vista me parece que esta ok.
Siempre es un placer poder ayudar.
Nota: la siguiente definición no es necesaria en este código.
HMG_DEFINE_DLL_FUNC ( win_Shell_GetImageLists, // user function name
"Shell32.dll", // dll name
BOOL, // function return type
WINAPI, // function type
"Shell_GetImageLists", // dll function name
(HIMAGELIST *phimlLarge, HIMAGELIST *phimlSmall), // dll function parameters (types and names)
(phimlLarge, phimlSmall), // function parameters (only names)
FALSE // return value if fail call function of dll
)
Siempre es un placer poder ayudar.
Nota: la siguiente definición no es necesaria en este código.
HMG_DEFINE_DLL_FUNC ( win_Shell_GetImageLists, // user function name
"Shell32.dll", // dll name
BOOL, // function return type
WINAPI, // function type
"Shell_GetImageLists", // dll function name
(HIMAGELIST *phimlLarge, HIMAGELIST *phimlSmall), // dll function parameters (types and names)
(phimlLarge, phimlSmall), // function parameters (only names)
FALSE // return value if fail call function of dll
)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Listar funções de uma DLL
Amiguinhos,
Eu uso o bom e velho IMPLIB da Borland e depois abro a .LIB gerada com ExplorerLIB 2.0.
Com este comando uma biblioteca será gerada a partir da .DLL especificada.
ExplorerLIB 2.0
Eu uso o bom e velho IMPLIB da Borland e depois abro a .LIB gerada com ExplorerLIB 2.0.
Código: Selecionar todos
IMPLIB NomeDaDLL.lib NomeDaDLL.dll
ExplorerLIB 2.0
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Listar funções de uma DLL
Bom dia,
Ok, tirei esta parte do código e compilou normalmente. Muito obrigado :-YClaudio Soto escreveu:A simple vista me parece que esta ok.
Siempre es un placer poder ayudar.
Nota: la siguiente definición no es necesaria en este código.
HMG_DEFINE_DLL_FUNC ( win_Shell_GetImageLists, // user function name
"Shell32.dll", // dll name
BOOL, // function return type
WINAPI, // function type
"Shell_GetImageLists", // dll function name
(HIMAGELIST *phimlLarge, HIMAGELIST *phimlSmall), // dll function parameters (types and names)
(phimlLarge, phimlSmall), // function parameters (only names)
FALSE // return value if fail call function of dll
)
Ótima dica Rochinha, obrigado.rochinha escreveu:Amiguinhos,
Eu uso o bom e velho IMPLIB da Borland e depois abro a .LIB gerada com ExplorerLIB 2.0.
Com este comando uma biblioteca será gerada a partir da .DLL especificada.Código: Selecionar todos
IMPLIB NomeDaDLL.lib NomeDaDLL.dll
ExplorerLIB 2.0
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
