none
Carregando DLL e parametros RRS feed

  • Pergunta

  •  

    Bom dia, eu consigo carregar uma DLL que esteja no mesmo diretório que o meu programa com o comando:

     

     

    HINSTANCE hLib = LoadLibrary("kernel32.dll");

     

     

    E depois executo um processo:

     

     

    FARPROC processo = GetProcAddress(hLib,"ExitProcess");

    processo();

     

     

    Meu programa termina com sucesso com esta instrução, porém, e se eu carregar funções com parametros de uma DLL, como eu posso estar passando estes parametros? por exemplo:

     

     

    FARPROC processo = GetProcAddress(hLib,"DeleteFile");

    //Esta linha aqui não funciona, mesmo com o parametro correto.

    processo("c:/texto.txt");

     

     

    Muito obrigado a todos.

     

     

    sexta-feira, 2 de maio de 2008 14:05

Todas as Respostas

  •  

    Luiz,

     

    não tem como o compilador saber os argumentos e retorno, do ponteiro para a função da DLL, retornada pelo GetProcAddress(..), o tipo de retorno dela, FARPROC, é definido como:

    typedef int (FAR WINAPI *FARPROC)();

     

    Assim, voce precisa fazer typecast para o ponteiro da função que voce quer mapear, voce precisa saber o prototipo dela.

     

    O melhor jeito de fazer é voce criar uma definição de tipo, usando typedef, como:

     

    typedef BOOL (*FUNC_A)(LPTSTR);

     

    para atribuir o valor de processo ao ponteiro da função

    processo = (FUNC_A) GetProcAddress(hLib, _T( "DeleteFile" ) );

     

    processo é um ponteiro para função que recebe LPTSTR de argumento, e retorna BOOL (vide DeleteFile), então eu o defino:

    FUNC_A processo;

     

    Assim voce consegue informar ao compilador que 'processo' retorna BOOL e tem argumentos, no caso, LPTSTR

     

    Abraços, cox

    sexta-feira, 2 de maio de 2008 16:15