MafnGamer 13 Denunciar post Postado Janeiro 20, 2013 Certo tenho duas dúvidas a primeira é a seguinte se eu importar uma biblioteca C++ desse jeito #include "biblioteca.h" todas as funções que tiver em biblioteca.h vão ser executadas? A segunda é: O que é isso? bool (*ptr_display)(float timeDelta)) Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Janeiro 20, 2013 MafnGamer, Não quer dizer que serão todas os métodos executados, e sim que estarão disponíveis. Quando se utiliza headers, é como que se estivessemos indicando ao compilador aonde encontrar determinada função. Quanto a segunda dúvida. É um ponteiro para função. Útil em vários casos, por exemplo, quando queremos uma função como parâmetro para outra função. Outra utilidade é o endereçamento em tempo de execução de funções de uma DLL (acho que se chama assim), quando utilizamos a API para "pegar" o endereço de uma função em uma DLL no momento que estiver sendo executado. Útil quando não queremos recompilar todo um programa por ter alterado uma única função de uma biblioteca. Veja este fragmento retirado da Wikipédia, exemplifica o que comentei: Usando ligação explícita em tempo de execuçãoOs exemplos a seguir mostram exemplos de como usar o carregamento em tempo de execução e auxílios de ligação usando bindings específicas das linguagens para a API WIN32. Microsoft Visual Basic Option Explicit Declare Function SomaNumeros Lib "Exemplo.dll" _ (ByVal a As Double, ByVal b As Double) As Double Sub Main() Dim Resultado As Double Resultado = SomaNumeros(1, 2) Debug.Print "O resultado é: " & Resultado End Sub C e C++ #include <windows.h> #include <stdio.h> // Assinatura da função da DLL typedef double (*importFunction)(double, double); int main(int argc, char **argv) { importFunction SomaNumeros; double resultado; // Carrega arquivo DLL HINSTANCE hinstLib = LoadLibrary("Exemplo.dll"); if (hinstLib == NULL) { printf("ERRO: não foi possível carregar a DLL\n"); return 1; } // Obtém o ponteiro da função SomaNumeros = (importFunction)GetProcAddress(hinstLib, "SomaNumeros"); if (SomaNumeros == NULL) { printf("ERRO: não foi possível achar a função na DLL\n"); FreeLibrary(hinstLib); return 1; } // Chama função. resultado = SomaNumeros(1, 2); // Descarrega arquivo DLL FreeLibrary(hinstLib); // Mostra o resultado printf("O resultado é: %f\n", resultado); return 0; } Caso tenha ficarado interssado, segue o link da página: http://pt.wikipedia.org/wiki/DLL#C_e_C.2B.2B Espero ter ajudado, FLW! Compartilhar este post Link para o post Compartilhar em outros sites
MafnGamer 13 Denunciar post Postado Janeiro 20, 2013 Certo, entendi fiquei com essa dúvida por causa que estou usando em um projeto uma biblioteca de um exemplo do livro, mas só que no meu arquivo principal eu não chamo essas funções mas elas entram em ação. Foi essa minha grande dúvida. Compartilhar este post Link para o post Compartilhar em outros sites