Ir para conteúdo
Faça parte da equipe! (2024) ×

c++ [DLL] CLI / Nativo. Implementando janela


marvis
 Compartilhar

Posts Recomendados

Olá Webcheats vim aqui hoje trazer um conhecimento que adquiri recentemente, bom basicamente nós vamos realizar um mix entre CLI e codigo Nativo a fim de obter o privilegio do desenvolvimento de janelas como o do C# ou do VB.

Esse texto não é recomendado para totalmente novatos sem conhecimento básico de programação em C++ e da IDE Visual Studio.

 

Esse mix irá compilar o código em parte .NET CLR e parte em Nativo, para isso utilizamos a Pragma que acessa algumas extensões do preprocessador que logo após passa para o compilador ( se eu tiver errado alguém me corrija plz : P ), as diretivas utilizadas no pragma são managed e unmanaged, onde managed se refere á códigos CLR .NET e unmanaged se refere a NATIVO.

Exemplo.

É necessário se cadastrar para acessar o conteúdo.

 

Direto ao ponto porque esse mix é necessário em uma DLL? entrypoint DllMain tem de ser NATIVO caso contrario ira dar error

VBHcozj.png

Então criamos uma função CLR para chamar a inicialização da janela.

Indo direto ao ponto vamos começar o desenvolvimento.

Primeiramente abra a janela de Novo Projeto

O tipo do projeto crie CLR Empty Project.

PJGYUpK.png

Logo apos vamos a propriedades do projeto

xZj0KtR.png

Alteramos para o

Configuration para All Configurations

Target Extension para .dll

Configuration Type para Dynamic library.

 

Adicionamos uma nova source main.cpp

http://prntscr.com/9mqtvy

 

e também uma janela ( Form CLR)

XVxew5C.png

 

com a source main e a da janela em mãos só falta terminar

declaramos os includes no main.cpp

Windows.h

e do header da sua janela ( FORM ).

Logo apos declaramos oque utilizaremos do .NET.

 

É necessário se cadastrar para acessar o conteúdo.

 

Depois criamos o entrypoint da dll com a #pragma unmanaged

e também utilizamos a função CreateThread para criar o thread que iniciará a janela pois o thread criado pela injeção não roda codigos CLI.

 

É necessário se cadastrar para acessar o conteúdo.

 

a função referenciada no CreateThread IniciarJanela() é uma função managed ou seja o CreateThread pode criar um thread independente da função ser CLR ou Nativa

no code da IniciarJanela, apenas é necessário iniciar com o classico Application::Run

 

É necessário se cadastrar para acessar o conteúdo.

 

Observação é necessario ver o namespace no .h da janela utilizada para declarar a classe da form.

 

Codigo completo

É necessário se cadastrar para acessar o conteúdo.

Vantagens: Desenvolvimento da interface fácil e rápido.

Desvantagens: Velocidade de inicialização, nada muito grande.

 

Créditos: Marvis[/i]

 

Sem CTRL C e CTRL V bitches, pelo menos reescrevam ( para os coladores ).

Link para o comentário
Compartilhar em outros sites

Eu já tinha feito isso, há bastante tempo kkkk', vi que "dava certo trabalho" e preferi/optei mesmo foi pelo tradicional, de qualquer forma, é interessante essa mesclagem. Mas mano, vale apena continue assim :D

 

~Abraços

A Jedi uses the Force for knowledge and defense, never for attack.

-Yoda, Master.

Link para o comentário
Compartilhar em outros sites

Eu já tinha feito isso, há bastante tempo kkkk', vi que "dava certo trabalho" e preferi/optei mesmo foi pelo tradicional, de qualquer forma, é interessante essa mesclagem. Mas mano, vale apena continue assim :D

 

~Abraços

: O obrigado pensei q ninguém ai gostar heuheuhe vou ver posto mais coisas u.u.

Link para o comentário
Compartilhar em outros sites

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.