Ir ao conteúdo
  • Cadastre-se

William.Mendes

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

Reputação

2
  1. já consegui compilar passando -lgdi32 -lgdi32 nas opções do compilador, apesar de está dando erro para abrir e gravar no arquivo, essa parte de compilação foi ! Obrigado
  2. C:\Users\f-wm3668\AppData\Local\Temp\cc5PlFGa.o printscreen7.cpp:(.text+0xf3): undefined reference to `__imp_GetDIBits' C:\Users\f-wm3668\AppData\Local\Temp\cc5PlFGa.o printscreen7.cpp:(.text+0x1ab): undefined reference to `__imp_GetDIBits' c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe C:\Users\f-wm3668\AppData\Local\Temp\cc5PlFGa.o: bad reloc address 0xc in section `.xdata' C:\Users\f-wm3668\Desktop\Exemplos fonts\collect2.exe [Error] ld returned 1 exit status
  3. Boa tarde, estou tendo erro para compilar essa aplicação, estou fazendo um printscreen para windows 7 em c++ usando o devcpp mesmo, se alguem já fez e conseguir ajudar agradeço muito, não sei se tem algum parametro para passar na compilação. #include <iostream>#include <windows.h>#include <stdio.h>//// Side Effects:N/A////This code is copyrighted and has// limited warranties.Please see http://// www.Planet-Source-Code.com/vb/scripts/Sh// owCode.asp?txtCodeId=10754&lngWId=3//for details.//**************************************// void TakeScreenShot(char* filename){ keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); HBITMAP h; OpenClipboard(NULL); h = (HBITMAP)GetClipboardData(CF_BITMAP); CloseClipboard(); HDC hdc=NULL; FILE *fp=NULL; void *pBuf=NULL; BITMAPINFO bmpInfo; BITMAPFILEHEADER bmpFileHeader; do { hdc=GetDC(NULL); ZeroMemory(&bmpInfo,sizeof(BITMAPINFO)); bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); GetDIBits(hdc,h,0,0,NULL,&bmpInfo,DIB_RGB_COLORS); if(bmpInfo.bmiHeader.biSizeImage<=0) bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth*abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8; if((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL) { MessageBox( NULL, "Unable to Allocate Bitmap Memory", "Error", MB_OK|MB_ICONERROR); break; } bmpInfo.bmiHeader.biCompression=BI_RGB; GetDIBits(hdc,h,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS); if((fp = fopen(filename,"wb"))==NULL) { MessageBox( NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR); break; } bmpFileHeader.bfReserved1=0; bmpFileHeader.bfReserved2=0; bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage; bmpFileHeader.bfType=0x4D42; bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp); fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp); } while(!false); if(hdc) ReleaseDC(NULL,hdc); if(pBuf) free(pBuf); if(fp) fclose(fp);}; int main(){ char file[20]="c:\\Screenshot.bmp"; TakeScreenShot(file); return 0;}
  4. //bom pode ajudar mais pessoas, esse exemplo que montei ficou bem claro como usar função para ponteiro #include <stdio.h>void func1(){ printf("run func1()\n");};void func2(){ printf("run func2()\n");};void func3(void (*func)()){ printf("run func3()\n"); func();};void func4(void (*f1)(void (*)()),void (*f2)()){ printf("run func4()\n"); f1(f2);};void func5( void (*f1)(void (*)()), void (*f2)(), void (*f3)()){ printf("run func5()\n"); f1(f2); f1(f3);};int main(){ //declaracao, ponteiro para funcao void (*funcao1)(); void (*funcao2)(); void (*funcao3)(void (*)()); void (*funcao4)(void (*)(void (*)()),void (*)()); void (*funcao5)(void (*)(void (*)()),void (*)(),void (*)()); //apontamento funcao1 = func1; //ou funcao1 = (void(*)())func1; funcao2 = func2; funcao3=func3; funcao4=func4; funcao5=func5; //exibir por funcao func1(); func2(); func3(func1); func3(func2); func4(func3,func1); func4(func3,func2); func5(func3,func1,func2); //exibir por ponteiro funcao1(); funcao2(); funcao3(func1); funcao3(func2); funcao4(func3,func1); funcao4(func3,func2); funcao5(func3,func1,func2); return 0;}
  5. valeu pela ajuda consegui resolver o problema e até a fazer de formas diferente !!!, consegui entender perfeitamente como devem ser declarado o prototipo dos ponteiros, e associação no caso das funções que recebem valores, variáveis ou outras funções como parâmetro. Obrigado e segue código de como ficou da forma mais simples. #include <stdio.h>//#include <iostream>#include <string>//using namespace std;void func1(){//cout << "run func1()" << endl;printf("run func1()\n");};void func2(){//cout << "run func2()" << endl;printf("run func2()\n");};void func3(void (*func)()){func();};int number(int *x){return (*x);}int main(){//ponteiro para funcaovoid (*funcao)();void (*funcao2)();//ponteiros para funcao em teste, funcao3 e funcao4 sao ponteiros para funcao que recebe como parametro funcao como ponteiro.//declaração e apontamento estão funcionando, mas chamada da funcao esta com erro.//test function 3, 4 and 5...void (*funcao3)();void (*funcao4)(void(*));void (*funcao5)(void *);void (*funcao6)(void (*)());funcao = (void(*)())func1;funcao();funcao = (void(*)())func2;funcao();funcao2 = func1;funcao2();funcao2 = func2;funcao2();func3(func1);func3(func2);//cout << "em teste:" << endl;printf("em teste:\n");funcao3 = (void(*)())func3;funcao4 = (void(*)(void(*)))func3;funcao5 = (void(*)(void*))func3;funcao6=func3;//error call function//chamadas com erros, uma das duas deveria funcionar//funcao3(func1);//ou//funcao4(func1);//ou//funcao5(func1);funcao6(func1);return 0;}
  6. O que estou tentando fazer é um ponteiro para func3 dentro do main, como pode ver os ponteiros funcao3, funcao4 e funcao5 são tentativas para apontar para func3, apesar das declaração de cada um ser diferente do outro, a declaração e apontamento não apresentam erros, mas ao tentar passar func1 para dentro do ponteiro de func3 da erro ! por isso deixei as linhas que estão dando erro comentadas aqui: //funcao3(func1); //ou //funcao4(func1); //ou //funcao5(func1); como pode ver todas elas estão apontando para func3 como aqui: funcao3 = (void(*)())func3; funcao4 = (void(*)(void(*)))func3; funcao5 = (void(*)(void*))func3; mas nenhuma das tentativas deu certo para chamar a execução da função passando func1 como parâmetro. chamando func3 diretamente passando func1 como parâmetro funciona normalmente, mas ao tentar fazer um ponteiro para func3 e passar func1 para dentro dele não funciona, sei que é possível só não consegui acertar na sintaxe, não sei se estou errando na declaração desses ponteiros, no apontamento ou na chamada da função.
  7. Boa tarde Mauro, tentei aplicar mas não consegui, até usando como base C se consegui me ajudar vou passar o mesmo código em C, esse problema não é relacionado a C++, ele vem da linguagem base C mesmo, na verdade não é nem problema da linguagem e sim da minha lógica para aplicar a solução, mas fico grato pela ajuda. Obrigado //em C#include <stdio.h>//#include <iostream>#include <string>//using namespace std;void func1(){ //cout << "run func1()" << endl; printf("run func1()\n");};void func2(){ //cout << "run func2()" << endl; printf("run func2()\n");};void func3(void (*func)()){ func();};int number(int *x){ return (*x);}int main(){ //ponteiro para funcao void (*funcao)(); void (*funcao2)(); //ponteiros para funcao em teste, funcao3 e funcao4 sao ponteiros para funcao que recebe como parametro funcao como ponteiro. //declaração e apontamento estão funcionando, mas chamada da funcao esta com erro. //test function 3, 4 and 5... void (*funcao3)(); void (*funcao4)(void(*)); void (*funcao5)(void *); funcao = (void(*)())func1; funcao(); funcao = (void(*)())func2; funcao(); funcao2 = func1; funcao2(); funcao2 = func2; funcao2(); func3(func1); func3(func2); //cout << "em teste:" << endl; printf("em teste:\n"); funcao3 = (void(*)())func3; funcao4 = (void(*)(void(*)))func3; funcao5 = (void(*)(void*))func3; //error call function //chamadas com erros, uma das duas deveria funcionar //funcao3(func1); //ou //funcao4(func1); //ou //funcao5(func1); return 0;}
  8. Boa tarde a todos, estou com uma duvida sobre como usar ponteiro para função que recebe função como parâmetro, através do uso de ponteiro. o exemplo pode ser compilado e está funcionando, mas após retirar o comentário da chamada das funções da erro nas linhas: //funcao3(func1); //ou //funcao4(func1); //ou //funcao5(func1); As outras chamadas estão funcionando corretamente, não sei qual das formas seria correta então tentei as 3, mas mesmo assim não funcionou. //c++ #include <iostream>#include <string>using namespace std;void func1(){ cout << "run func1()" << endl; };void func2(){ cout << "run func2()" << endl; };void func3(void (*func)()){ func(); };int number(int *x){ return (*x); }int main(){ //ponteiro para funcao void (*funcao)(); void (*funcao2)(); //ponteiros para funcao em teste, funcao3 e funcao4 sao ponteiros para funcao que recebe como parametro funcao como ponteiro. //declaração e apontamento estão funcionando, mas chamada da funcao esta com erro. //test function 3, 4 and 5... void (*funcao3)(); void (*funcao4)(void(*)); void (*funcao5)(void *); funcao = (void(*)())func1; funcao(); funcao = (void(*)())func2; funcao(); funcao2 = func1; funcao2(); funcao2 = func2; funcao2(); func3(func1); func3(func2); cout << "em teste:" << endl; funcao3 = (void(*)())func3; funcao4 = (void(*)(void(*)))func3; funcao5 = (void(*)(void*))func3; //error call function //chamadas com erros, uma das duas deveria funcionar //funcao3(func1); //ou //funcao4(func1); //ou //funcao5(func1); return 0;}

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...