segunda-feira, 23 de junho de 2008

Usando Dll no Borland C++ Builder

 

Recomendações para o desenvolvimento dos dois projetos isolados em pastas separadas:

 

1) Criar novo projeto: File -> New -> Other -> Dll Wizard

        Project1 -> ProjDll.bpr
        Unit1 -> DllMain.cpp

2) Acrescentar um Header File para a DLL: File -> New -> Other -> Header File

        File1.h -> DllMain.h

3) Incluir em DllMain.h a diretiva de compilador:

        #include "MinhaClasse.h"

4) Incluir em DllMain.cpp a diretiva de compilador:

        #include "DllMain.h"

5) Criar nova Unit: File -> New -> Unit

        Unit2.cpp -> MinhaClasse.cpp
        Unit2.h -> MinhaClasse.h

6) Declarar a classe em MinhaClasse.h com a especificação:

        class __declspec(dllexport) MinhaClasse
        {
            ...
        };

7) Gerar a DLL: Project -> Build ProjDLL

8) Depurar erros da DLL e prosseguir somente quando estiver tudo correto.

9) Criar novo projeto: File -> New -> Application

        Project1.bpr -> ProjDemo.bpr
        Project1.cpp -> ProjDemo.cpp
        Unit1.cpp -> DemoFormMain.cpp
        Unit1.h -> DemoFormMain.h

10) Copiar da pasta do projeto da DLL os arquivos:

        ProjDll.lib
        ProjDll.dll
        DllMain.h
        MinhaClasse.h

11) Acrescentar no ProjDemo: Project -> Add to Project...

        Selecionar aruivos do tipo Library (*.lib)
        Indicar o arquivo a ser adicionado ao projeto: ProjDll.lib

12) Acrescentar no DemoFormMain.h a diretiva de compilador:

        #include "DllMain.h"

14) Substituir a diretiva de compilador em MinhaClasse.h de/para:

        dllexport -> dllimport

15) A partir deste estágio, já podemos declarar variáveis do tipo MinhaClasse:

        MinhaClasse obj1MinhaClasse;
        MinhaClasse *obj2MinhaClasse;

16) Se a declaração for para objeto estático, usar:

            obj1MinhaClasse.Atributo
            obj1MinhaClasse.Método()

17) Se a declaração for para objeto dinâmico, usar:

            obj2MinhaClasse = new MinhaClasse();
            ...
            obj2MinhaClasse->Atributo
            obj2MinhaClasse->Método()
            ...
            delete obj2MinhaClasse

18) Atenção para o ciclo vida dos objetos instanciados:

        estaticamente -> escopo da função
        dinamicamente -> requer Delete antes do término da função/programa

Até a próxima.

Nenhum comentário: