terça-feira, 21 de setembro de 2021

Jogo da velha - rodando em dll


Passado muitos dias sem programar,
me vi cercado das mesmas dúvidas de sempre...
O que fazer agora? 
Usar C++ com: MFC, win32, C++ Builder, Qt Creator,
C++ texto, concertar alguns bugs de programas,
"Hoje estou inspirado, ha ha",
Ou nada de C++, ir direto no C#, ou quem sabe,
Java texto, JavaFx, bom, de tudo isto citado,
nós brincamos um pouco, mas acabei desanimando,
logo, sinceramente as vezes me vem um desânimo
muito grande, e fico me perguntando como
que fui parar neste mundo, quem colocou isto 
na minha cabeça?
Quantas férias de trabalho todas dedicadas
a programação, quantos dias de feriados,
e fins de semanas prolongados passamos preso
lutando com os códigos, quantas noites
mal dormidas, pensando em uma solução
para um melhor desempenho de um programa.
Bom vamos deixar isto de lado e vamos
ao que interessa:
Comecei abrindo projetos antigos
criado em C e C++ usando o eclipse,
que foi minha ferramenta junto com
o MinGw por muito tempo, e me deparei
com um projeto de dll que criamos
a alguns anos atrás, mas como tudo estava salvo,
todos os arquivos, linha de comando,
pequenos lembretes que escrevi para mim mesmo,
já prevendo reaver isto no futuro, 
não pensei duas vezes, e fui logo recompilando
o projeto, e pra minha surpresa a dll
foi criada em pleno sucesso e sem warnnings.
Já sabia que funcionaria satisfatoriamente
num programa em C++ console, fiz os testes
e tudo foi aprovado.
Mas como sempre quero mais, abri o VS Studio,
e criei um programa em console usando
C++ com o .net ( CLI ), duvidoso se funcionaria,
e pra minha surpresa, depois de muitas vibrações de alegria,
lá estava minha dll rodando no .net, com todas as
funções antigas da conio2.h que encapsulamos,
junto com um excelente programa de jogo da velha
que criamos com tantas dificuldades na época.
Neste tópico, posto o programa que usei para chamar
a função principal que roda encapsulada na dll,
e se alguém tiver interesse em testar a dll
só precisa entrar em contato comigo.
Veja o vídeo do programa funcionando.




#include "pch.h"
#include <windows.h>
#include <stdio.h>

using namespace std;

int ( WINAPI* Escolhe_Jogar ) ( int x );
int Carrega_Fncoes ( ) {
    HINSTANCE hDll;
    hDll = LoadLibrary ( L"example_dll.dll" );
    if ( !hDll ) {
        printf ( "Não foi possível carregar a dll" );
        exit ( 1 );
    }
    Escolhe_Jogar = ( int ( WINAPI* ) ( int x ) ) GetProcAddress ( hDll, "Escolhe_Jogar" );
    if ( !Escolhe_Jogar ) {
        printf ( "\nNão foi possível carregar as funções da DLL" );
        exit ( 1 );
    }
    return 0;
}
int main ( ) {
    Carrega_Fncoes ( );
    int x = 0;
    Escolhe_Jogar ( x );
    return 0;
}