Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Trabalhando com C e C++


rap_
 Compartilhar

Posts Recomendados

LINGUANGEM C C++ (USANDO BIBLIOTECAS DE LIGAÃÆ’ââ‚¬Â¡ÃÆ’Æ’O DINÃÆ’‚NMICA ---DLL---)

By: RaP_

 

 

---Class View

A funcionalidade “Class View†do Visual C++ ÃÆ’© um interessante diferencial desse produto. A idÃÆ’©ia ÃÆ’©

“enxergar†um projeto de um programa C++ a partir da descriÃÆ’ÂÂ§ÃÆ’£o de suas classes, mais que pela

descriÃÆ’ÂÂ§ÃÆ’£o de seus arquivos (o que corresponde a “File Viewâ€ÂÂ).

HÃÆ’¡ inÃÆ’ºmeras funcionalidades de navegaÃÆ’ÂÂ§ÃÆ’£o no cÃÆ’³digo C++ a partir da funcionalidade do Class View.

Por exemplo: clicando-se num mÃÆ’©todo de uma classe, automaticamente o editor ÃÆ’© aberto e o cursor

posicionado na classe em questÃÆ’£o.

“C / C++ e OrientaÃÆ’ÂÂ§ÃÆ’£o a Objetos em Ambiente Multiplataformaâ€ÂÂ, versÃÆ’£o 5.1

__

classes

mÃÆ’©todos

de uma classe

--- Usando bibliotecas de ligaÃÆ’ÂÂ§ÃÆ’£o dinÃÆ’¢mica (DLL)

Uma biblioteca de ligaÃÆ’ÂÂ§ÃÆ’£o dinÃÆ’¢mica (“Dynamic Link Library - DLLâ€ÂÂ) ÃÆ’© uma biblioteca que serÃÆ’¡ ligada

ao programa executÃÆ’¡vel em tempo de execuÃÆ’ÂÂ§ÃÆ’£o. Para fazer uma dll, a primeira coisa a fazer ÃÆ’© um

projeto novo, em que se escolhe “Wind32 Dynamic-Link Libraryâ€ÂÂ, como mostrado na figura. A dll

deve ter um nome (no caso “mydllâ€ÂÂ, e pertencer a algum workspace). No wizard, escolha “An empty

DLL projectâ€ÂÂ.

Abaixo pode-se ver um exemplo de dll. Nesse exemplo, a biblioteca contÃÆ’©m 3 funÃÆ’ÂÂ§ÃÆ’µes globais. Uma ÃÆ’©

dllTest, outra ÃÆ’© plus_1, e a terceira ÃÆ’© plus_2. A dllTest apenas coloca uma constante string no

console. As outras duas, recebem um inteiro como parÃÆ’¢metro e retornam um inteiro (somando 1 e 2

respectivamente). SÃÆ’£o funÃÆ’ÂÂ§ÃÆ’µes simples de teste, ÃÆ’ºteis para um tutorial.

“C / C++ e OrientaÃÆ’ÂÂ§ÃÆ’£o a Objetos em Ambiente Multiplataformaâ€ÂÂ, versÃÆ’£o 5.1

No arquivo mydll.cpp, escreve-se o corpo da dll, acrescentando-se a macro WINAPI ao protÃÆ’³tipo da

funÃÆ’ÂÂ§ÃÆ’£o. As regras de compilaÃÆ’ÂÂ§ÃÆ’£o da dll sÃÆ’£o as mesma de qualquer arquivo cpp.

///////////////////////////////////////////////////////

// mydll.cpp

#include <iostream.h>

#include "mydll.h"

void WINAPI dllTest() {

cout << "You're inside a Dll" << endl;

}

int WINAPI plus_1(int i) {

return i+1;

}

int WINAPI plus_2(int i) {

return i+2;

}

No arquivo mydll.h, coloca-se apenas os protÃÆ’³tipos das funÃÆ’ÂÂ§ÃÆ’µes globais da dll, acrescentando-se a

mesma macro WNAPI. Uma outra macro _MYDLL_H_ controla a possibilidade de inclusÃÆ’£o mÃÆ’ºltipla

do header mydll.h.

///////////////////////////////////////////////////////

// mydll.h

#if !defined(_MYDLL_H_)

#define _MYDLL_H_

#include <afxwin.h>

// place the prototypes of dll functions

void WINAPI dllTest();

int WINAPI plus_1(int i);

int WINAPI plus_2(int i);

#endif // _MYDLL_H_

AlÃÆ’©m do cpp e do header, ÃÆ’© preciso que exista um arquivo texto de definiÃÆ’ÂÂ§ÃÆ’£o. No caso esse arquivo ÃÆ’©

mydll.def. O modelo abaixo mostra como fazer esse arquivo. AlÃÆ’©m do nome e descriÃÆ’ÂÂ§ÃÆ’£o, ÃÆ’© preciso que

se faÃÆ’§a uma lista dos identificadores a serem exportados (no caso o nome das 3 funÃÆ’ÂÂ§ÃÆ’µes globais). Para

“C / C++ e OrientaÃÆ’ÂÂ§ÃÆ’£o a Objetos em Ambiente Multiplataformaâ€ÂÂ, versÃÆ’£o 5.1

__

criar o arquivo def, basta escolher no menu “File-New†e no tab “files†escolher o nome com

terminaÃÆ’ÂÂ§ÃÆ’£o *.def.

O arquivo mydll.def aparece no projeto, como se fosse um arquivo *.cpp.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; mydll.def : Declares the module parameters for the DLL.

LIBRARY "mydll"

DESCRIPTION 'MyDll Windows Dynamic Link Library'

EXPORTS

; Explicit exports can go here

dllTest @1

plus_1 @2

plus_2 @3

Para usar a dll, ÃÆ’© preciso fazer a seguinte seqÃÆ’ÂÂ¼ÃÆ’ªncia de operaÃÆ’ÂÂ§ÃÆ’µes. Em primeiro lugar ÃÆ’© preciso carregar

a dll. Isso ÃÆ’© feito com a funÃÆ’ÂÂ§ÃÆ’£o LoadLibrary. Essa operaÃÆ’ÂÂ§ÃÆ’£o pode falhar (como a abertura de um

arquivo). Portanto, um programa bem feito deverÃÆ’¡ tratar a possibilidade de o carregamento da dll

falhar.

O programa deve ter variÃÆ’¡veis tipo “ponteiro para funÃÆ’ÂÂ§ÃÆ’£oâ€ÂÂ, para receber as funÃÆ’ÂÂ§ÃÆ’µes da dll. Para usar as

funÃÆ’ÂÂ§ÃÆ’µes, a segunda coisa a fazer ÃÆ’© ligar os ponteiros para funÃÆ’ÂÂ§ÃÆ’£o locais com as funÃÆ’ÂÂ§ÃÆ’µes na dll. Isso ÃÆ’©

feito com a funÃÆ’ÂÂ§ÃÆ’£o GetProcAddress. Novamente, essa operaÃÆ’ÂÂ§ÃÆ’£o pode falhar e um programa bem feito

“C / C++ e OrientaÃÆ’ÂÂ§ÃÆ’£o a Objetos em Ambiente Multiplataformaâ€ÂÂ, versÃÆ’£o 5.1

__

deve tratar a possibilidade de falha. Repare que o retorno da funÃÆ’ÂÂ§ÃÆ’£o GetProcAddress deve ser

maquiado (type cast) para ser compatÃÆ’­vel com a variÃÆ’¡vel local tipo “ponteiro para funÃÆ’ÂÂ§ÃÆ’£oâ€ÂÂ.

Com os ponteiros para funÃÆ’ÂÂ§ÃÆ’£o carregados, basta usa-los como se fossem funÃÆ’ÂÂ§ÃÆ’µes do prÃÆ’³prio programa.

Note que como o carregamento da dll ÃÆ’© feito em tempo de execuÃÆ’ÂÂ§ÃÆ’£o, seria bastante simples que

alguma lÃÆ’³gica escolhesse carregar uma ou outra dll equivalente. Por exemplo: a dll poderia conter

mensagens ou recursos, em que as frases seriam escritas em um determinado idioma. Assim um

software poderia ser internacionalizado apenas por escrever uma nova dll (e fazer o programa

principal encontrar essa dll, o que seria feito na instalaÃÆ’ÂÂ§ÃÆ’£o do programa).

Para conseguir ligar (linkar) o usedll.cpp, ÃÆ’© preciso acrescentar a biblioteca “nafxcwd.libâ€ÂÂ. No caso desse exemplo, foi feito um novo projeto, tipo “win32 console

applicationâ€ÂÂ, chamado usedll. Portanto, considerando que as saÃÆ’­das dos projetos ficam no diretÃÆ’³rio

“Debugâ€ÂÂ, ou “Releaseâ€ÂÂ, a forma de apontar a dll a partir do projeto usedll ÃÆ’© a string

"....mydllDebugmydll.dll". Uma dll pode ser executada sob debug tanto quanto um programa

normal, desde que tenha sido compilada para debug. TambÃÆ’©m como um programa ou biblioteca

normal, caso nÃÆ’£o haja interesse de debug (e.g. entregando o arquivo para um cliente), ÃÆ’© recomendÃÆ’¡vel

compilar como Release.

///////////////////////////////////////////////////////

// usedll.cpp (mydll.dll)

// use_dll.cpp

#include <iostream.h>

#include <afxwin.h>

void main() {

HINSTANCE hDll; // dll handler

hDll = LoadLibrary("....mydllDebugmydll.dll"); // load dll

// handle error while loading dll handler

if (!hDll) {

cout << "Error while loading DLL handler" << endl;

exit(1);

}

// function pointers equivalent to dll functions

void (WINAPI * c_dllTest)();

int (WINAPI *c_plus_1)(int);

int (WINAPI *c_plus_2)(int);

// link function pointers to dll functions

c_dllTest = (void (WINAPI *)())GetProcAddress(hDll, "dllTest");

c_plus_1 = (int (WINAPI *)(int))GetProcAddress(hDll, "plus_1");

c_plus_2 = (int (WINAPI *)(int))GetProcAddress(hDll, "plus_2");

// handle error while loading functions

if(!c_dllTest || !c_plus_1 || !c_plus_2) {

cout << "Error while loading functions from DLL" << endl;

exit(1);

}

// now, use the functions freely

c_dllTest();

cout << "3+1=" << c_plus_1(3) << endl;

cout << "5+2=" << c_plus_2(5) << endl;

}

SaÃÆ’­da do programa:

You're inside a Dll

3+1=4

5+2=7

“C / C++ e OrientaÃÆ’ÂÂ§ÃÆ’£o a Objetos em Ambiente Multiplataformaâ€ÂÂ, versÃÆ’£o 5.1

 

__

--- DLL para Windows

Tipos de dll com Visual C para Windows - Projeto “MFC AppWizard (dll)â€ÂÂ.

1. Regular DLL with MFC static linked

2. Regular DLL using shared MFC DLL

3. MFC Extension DLL (using shared MFC DLL)

A dll tipo “regular†(caso 1. e 2.) pode em princÃÆ’­pio ser usada em outra linguagem que nÃÆ’£o Visual C++

(como Delphi). A dll tipo “extension†somente pode ser usada para programas com Visual C++.

 

 

Desnvolvido por Rap_

rafael_neo-@hotmail.com

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

AÃÆ’­ kra vlw mermo seus posts estÃÆ’£o show

eh de gennte assim q o forum precisa

depois dÃÆ’ª uma olhada no tutorial de java q eu postei

e me diga a sua opiniÃÆ’£o

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

TITOCOrox*, valeu cara finalmente axei pessoas nesse forum q sabem da valor as coisas!! cara eu postei uma parada aki um tutorial bank o carinha ja foi logo dizenu q era lecheer e tipow so pq num entendeu disse q eu num tinha capacidade pra fazer um tutorial e talz aff....

mais tem nda naum vlw pelo seu elogio e e isso q me motiva a ajudar pessoas!!

flw e abraÃÆ’§o se der me add no msn!!

rafael_neo-@hotmail.com

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

rap_, depois tem mando uma MP, fraga estou fazendo SI, mais a linguagem inicial que os professores estao ensinando e PASCAL, vc q programa sabe pascal nun se usa pra mais nd , agora o C e C++l, apesar de antigo se usa muito, se puder post alguns algoritimos, de programinha simples pra C, vlw amigo belo post!

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

PSAUX, man eu vo postar aki sim mais eu preciso de uma forÃÆ’§a qru me tornar programador aki no cb! entaum eu vo ajudar v6!! me add no msn q eu te passo!! eu tenhu umas apostilhas q eu fiz aki para meu curso de programaÃÆ’ÂÂ§ÃÆ’£o e tmb para uns colega meu aki ai eu te passo blza?

 

guardtjf, pods crer man he mto xataum mermu mais dexa passar dessa etapa pa vc v como vai c massa estudar programaÃÆ’ÂÂ§ÃÆ’£o!!

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

Obrigado a todos v6 q entenderam q viram e gostaram do meu trabalho aki no CB espero q outras pessoas tbm vejam!!!

 

visitem meus outros topicos na delta zone q v6 vaum v se gostam!! espero ter ajudado a todos...

 

te mais e qualquer duvida me add no msn rafael_neo-@hotmail.com q eu tiro suas duvidas blza??

te mais ai pra v6

 

FuiZ

Link para o comentário
Compartilhar em outros sites

Re.: Trabalhando com C e C++

 

O amigo to meio sem tempo pra entra no msn!!! qnd eu entrar eu te add, fraga to sem pc no trampo, to entrano poco no forum =( tipo parei de usa hacks do gb, to entrano no forum pra entra no delta zone!! ta rox o delta zone!!! 8)

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...

Boa cara vlw, eu q estou comeÃÆ’§ando agora, ja me deu uma boa ajuda, estou na escola de programaÃÆ’ÂÂ§ÃÆ’£o aki, ja passei pelo algoritimo, ,portugol, e agora entrei em c++, poderiamos dar continualidade a esse topico

Podia postar uns tutoriais e alguns exemplos de programas ou algo assim.

AgredeÃÆ’§o

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...
Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.