Este exemplo pode ter sido visualizado em outros locais de outras formas, mas aqui quis reproduzi-lo, para que nós tenhamos de forma simples um sistema que utiliza-se de uma DLL externa para produzir alguma função (resultado).
O projeto não tem nenhuma característica especial, além de chamar uma DLL externa, sua função é validar se uma inscrição estadual digitado é ou não válida no estado selecionado.
Abaixo segue os cinco arquivos que contém o código de programa do projeto, no final da postagem você pode baixar o arquivo compactado com o projeto completo, bastando apenas compilar.
main.prg
Programa principal, encarregado por chamar o formulário (janela), assim como testar se a DLL esta disponível no disco, e também por abrigar duas outras funções, uma para carregar os estados brasileiros em uma combo e outra para fazer trazer o nome do estado a partir do posicionamento da combo.
#INCLUDE "hmg.ch" // ---------------------------------------------------------------------- // main.prg // FUNCTION Main public dllFile := "dllinsce32.dll" IF FILE("DLLINSCE32.DLL") LOAD WINDOW Main Main.CENTER Main.ACTIVATE ELSE MSGSTOP("DLLINSCE32.DLL não localizada!","Verifica IE (Erro Fatal)") ENDIF RETURN nil FUNCTION buscaEstado() pos := GETPROPERTY("main","comboEstado","VALUE") estado := SUBSTR( GETPROPERTY("main","comboEstado","ITEM",pos),1,2) RETURN estado FUNCTION encheComboEstado() LOCAL posicaoSP DOMETHOD("main","comboEstado","DELETEALLITEMS") DOMETHOD("main","comboEstado","ADDITEM","AC-Acre") DOMETHOD("main","comboEstado","ADDITEM","AL-Alagoas") DOMETHOD("main","comboEstado","ADDITEM","AP-Amapá") DOMETHOD("main","comboEstado","ADDITEM","AM-Amazonas") DOMETHOD("main","comboEstado","ADDITEM","BA-Bahia") DOMETHOD("main","comboEstado","ADDITEM","CE-Ceará") DOMETHOD("main","comboEstado","ADDITEM","DF-Distrito Federal") DOMETHOD("main","comboEstado","ADDITEM","ES-Espírito Santo") DOMETHOD("main","comboEstado","ADDITEM","GO-Goiás") DOMETHOD("main","comboEstado","ADDITEM","MA-Maranhão") DOMETHOD("main","comboEstado","ADDITEM","MT-Mato Grosso") DOMETHOD("main","comboEstado","ADDITEM","MS-Mato Grosso do Sul") DOMETHOD("main","comboEstado","ADDITEM","MG-Minas Gerais") DOMETHOD("main","comboEstado","ADDITEM","PR-Paraná") DOMETHOD("main","comboEstado","ADDITEM","PB-Paraíba") DOMETHOD("main","comboEstado","ADDITEM","PA-Pará") DOMETHOD("main","comboEstado","ADDITEM","PE-Pernambuco") DOMETHOD("main","comboEstado","ADDITEM","PI-Piauí") DOMETHOD("main","comboEstado","ADDITEM","RJ-Rio de Janeiro") DOMETHOD("main","comboEstado","ADDITEM","RN-Rio Grande do Norte") DOMETHOD("main","comboEstado","ADDITEM","RS-Rio Grande do Sul") DOMETHOD("main","comboEstado","ADDITEM","RO-Rondonia") DOMETHOD("main","comboEstado","ADDITEM","SC-Santa Catarina") DOMETHOD("main","comboEstado","ADDITEM","SE-Sergipe") DOMETHOD("main","comboEstado","ADDITEM","SP-São Paulo") DOMETHOD("main","comboEstado","ADDITEM","TO-Tocantins") posicaoSP := GETPROPERTY("main","comboEstado","ITEMCOUNT")-1 SETPROPERTY("main","comboEstado","VALUE", posicaoSP ) RETURN nil
main_form_oninit.prg
Este programa é responsável por alojar a função que é executada assim que o formulário (janela) é carregada, e este aciona a função para preencher o combo.
#include "hmg.ch" // ---------------------------------------------------------------------- // main_form_oninit.prg // declare window Main Function main_form_oninit encheComboEstado() Return Nil
main_btnversao_action.prg
Este programa é apenas para mostrar a versão do sistema, e trazer informações sobre o mesmo, fique atento para o detalhe que aqui acionamos a primeira função interna da DLL para mostrar a versão da mesma.
#INCLUDE "hmg.ch" // ---------------------------------------------------------------------- // main_btnversao_action.prg // DECLARE WINDOW Main DECLARE DLL_TYPE_INT VersaoDLL() IN DLLINSCE32.DLL FUNCTION main_btnversao_action LOCAL nRet := VersaoDLL() MSGINFO("Verifica IE 1.0"+CHR(13)+; CHR(13)+; "autor: Crocciari, Daniel"+CHR(13)+; " danielcrocciari@gmail.com"+CHR(13)+; " danielcrocciari.wordpress.com"+CHR(13)+; CHR(13)+; "DLLINSCE32.DLL versão: "+AllTrim(Str(nRet))+CHR(13)+; CHR(13)+; "HMG Lights"+CHR(13)+; "https://hmglights.wordpress.com/"+CHR(13)+; CHR(13)+; "Harbour MiniGUI"+CHR(13)+; "http://www.harbourminigui.com/"+CHR(13)+; CHR(13)+; "HMG-IDE"+CHR(13)+; "https://sites.google.com/site/hmgweb/"+CHR(13)+CHR(13)+; "2012"+; CHR(13),"Verifica IE - Sobre...") RETURN Nil
main_btverifica_action.prg
Este programa aloja a função que realmente faz a verificação da Inscrição Estadual junto a DLL para saber se a mesma é válida ou não.
#INCLUDE "hmg.ch" // ---------------------------------------------------------------------- // main_btverifica_action.prg // DECLARE WINDOW Main DECLARE DLL_TYPE_INT ConsisteInscricaoEstadual( DLL_TYPE_LPSTR Insc, DLL_TYPE_LPSTR UF ) IN DLLINSCE32.DLL FUNCTION main_btverifica_action LOCAL nRet,pos,estado,ie IF FILE("DLLINSCE32.DLL") ELSE MSGSTOP("DLLINSCE32.DLL não localizada!","Verifica IE (Erro Fatal)") DOMETHOD("main","RELEASE") ENDIF estado := buscaEstado() ie := GETPROPERTY("main","txtInscricao","VALUE") nRet := ConsisteInscricaoEstadual(ie,estado) IF nRet == 0 SETPROPERTY("main","lblStatus","VALUE","Inscrição "+ie+" "+estado+" válida") SETPROPERTY("main","lblStatus","FONTCOLOR",{0,255,64,}) ELSEIF nRet == 1 SETPROPERTY("main","lblStatus","VALUE","Inscrição "+ie+" "+estado+" inválida") SETPROPERTY("main","lblStatus","FONTCOLOR",{255,0,0,}) ELSE SETPROPERTY("main","lblStatus","VALUE","Parâmetros inválidos") SETPROPERTY("main","lblStatus","FONTCOLOR",{255,0,0,}) ENDIF DOMETHOD("main","txtInscricao","SETFOCUS") RETURN Nil
main_comboestado_onchange.prg
Esta é apenas para fazer um “charme”, aqui quando movimentos a seleção dentro da combo ela troca a imagem da bandeira do estado.
#include "hmg.ch" // ---------------------------------------------------------------------- // main_comboestado_onchange.prg // declare window Main Function main_comboestado_onchange estado := buscaEstado() file := "img\"+estado+".jpg" If file(file) SETPROPERTY("main","imgBandeira","PICTURE",file) Else SETPROPERTY("main","imgBandeira","PICTURE","img\br.jpg") EndIf Return Nil
Também disponibilizei o projeto, o executável ou apenas a DLL, confira nos links abaixo:
Dentro do arquivo compactado existe todo o projeto, os códigos acima listados, assim como as imagens e arquivo DLL utilizados para o desenvolvimento.
- Baixe o arquivo do projeto clicando neste link http://www.mediafire.com/?j5bvt5ytyqsgcr1
- Caso precise apenas da DLL, ela também está disponível para download, segue arquivo DLL (DllInscE32.dll) para validar Inscrição Estadual http://www.mediafire.com/?xtz1f7cfk19t47t
- Se você quiser o arquivo executável deste programa, faça o download no link http://www.mediafire.com/?rxn52qiv308jxgw
Também gostei da rotina para “Validar Inscrição Estadual”! Sou novato no Harbour, portanto, aí vai minha pergunta: a função: “DOMETHOD()” é do Harbour ou da DLL: “dllinsce32.dll”? Quais são os parâmetros que ela recebe?
Obrigado!
Jsnascimento
doMethod() é do Harbour e não dá DLL, desconheço todos os parâmetros dessa dll.
Show de bola o exemplo me ajudou muito na utilização de dll. Valeu!