Página 1 de 1

DLL do Biulder C++ no Visual Studio C 2008

MensagemEnviado: 28 Out 2009 13:29
por lasfclestat
Prezados, boa tarde, estou tentando ler uma dll, no qual eu não tenho o codigo fonte dela, estou utilizando o visual studio C 2008... Eu sei que a DLL foi desenvolvida no builder C++.

Eu estou conseguindo carregar a DLL (eu acredito) porém não consigo acessar a função dela...

Abaixo esta o codigo que eu estou utilizando

Código: Selecionar todos
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

typedef void (__cdecl *MYPROC_V)(void);


VOID main(VOID)
{
   //string endd;

    HINSTANCE hinstLib;
    MYPROC_V C_Inicia;

    // Carrega arquivo DLL
   hinstLib = LoadLibrary(TEXT("DLL_Client.dll"));   

    if (hinstLib != NULL)
    {            
        printf("<Carregou...>\n\n");
      
   // Obtém o ponteiro da função
   C_Inicia = (MYPROC_V) GetProcAddress(hinstLib, "Inicia");
   
   if ( (C_Inicia==NULL) )
        {
      printf("ERRO: nao foi possivel achar a funcao na DLL\n\n");
           //       FreeLibrary(hinstLib);
        } 
      else
      {
         printf("<Conectou...>\n\n");
         printf("<OK!!!>\n");
         // Descarrega arquivo DLL
   //      FreeLibrary(hinstLib);
      }
    }
   else
    {
      printf("ERRO: não foi possível carregar a DLL\n\n");
   }
                   
}


Alguem tem alguma sugetão do que pode estar causando esse erro???
//Sempre mostra a mensagem ERRO: nao foi possivel achar a funcao na DLL

obrigado...

Re: DLL do Biulder C++ no Visual Studio C 2008

MensagemEnviado: 28 Out 2009 16:28
por andre_luis
lasfclestat,

Será que essa DLL não possui nenhuma outra dependencia ?

Os pacotes do Delphi e Builder costumavam depender de alguns outros arquivos, além da DLL. Se for esse o caso, essa função pode estar dentro de um desses arquivos.

+++

MensagemEnviado: 28 Out 2009 17:02
por lasfclestat
Certo, entendi..

A empresa que me passou essa dll, me passou outras também que são chamas por essa dll principal, como as função que eu irei chamar estão dentro desta dll principal, eu importei apenas ela, vou tentar importar as outras e ver o que acontece...

Essa empresa também me deu um fonte que eles fizeram para testa-la, porem esse fonte está em builder C++, e eu não tenho esse compilador...

Obrigado

[]s
Lucas

MensagemEnviado: 29 Out 2009 09:33
por lasfclestat
Resolvido o problema, na verdade eu não precisei chamar as outras dll...

O que eu precisei foi mudar o ponteiro de chamada da minha função

Código: Selecionar todos
C_Inicia = (MYPROC_V) GetProcAddress(hinstLib, "@Inicia");


Pelo programa Dependency Walker eu consegui ver que o nome pelo qual eu precisava chamar minha função...

Obrigado....