Jump to content
Fivewin Brasil

Search the Community

Showing results for tags 'harbour'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

There are no results to display.

Forums

  • FiveWin
    • WorkShop
    • Advantage Server
    • FiveScript
    • FiveWin Avaliação
    • TopConnect
    • Classes
    • Programação
    • FiveWin - Conversão de 16 bits para 32 bits
    • Seminário
    • Artigos / Tutoriais
    • Off - Topic
  • Suporte Estendido
    • Duvidas Gerais

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 13 results

  1. Criar aplicações Harbour usando nefele (exemplos, fórum..., Youtube) Para ajudar, o Xailer possui um Servidor Web. Fazendo uma comparação superficial entre ambos (mod) e característica de trabalho, nefele parece ser melhor, mais fácil criar/manutenções e fazer mais sentido para programadores xBase. Contatos profissionais: Site | Facebook | YouTube Super Kit Harbour/Xailer, DBF, SQL
  2. Iniciando em Harbour inclui exemplos de scripts para uso mais adequado e avançado. [], contatos profissionais Facebook | idlagam.com
  3. Bom dia pessoal, A pedido do Manuel estou postando aqui um anuncio, ele ira iniciar um curso de Harbour com uso de Language C e o material sera criado e entregue no final do curso um PDF final com todo os temas. Abaixo segue que ira ser abordado. ( O curso será em Espanhol e tudo online, eu irei traduzir para o português e entregar a aqueles que se adquirir ). Detalhes: * Um manual que entregarei por assunto. * Um fórum que Cristóbal Navarro gentilmente nos preparou. No fórum estaremos fazendo perguntas e respondendo-as e onde colocaremos muitos exemplos. Qualquer pessoa pode ingressar no curso desde que não haja atendimento físico, tudo será virtual. Tem um custo de 30 euros. ( R$ 210 ) pagamento por PayPal. O inicio sera em 15 de abril. Esta é a agenda, caso alguém esteja interessado: Harbour e Language C. 1. Introdução e objetivo do curso. 2. Ferramentas necessárias para o curso. 3. Introdução. Um pouco de C. 4. Operadores. 5. Estruturas de controle. 6. Tipos de dados elementares de C 7. Tipos de dados estruturados: Tabelas, matrizes ou matrizes em C. Vetores, matrizes e tabelas multidimensional. 8. Tipos de dados estruturados: estrutura, uniões e enumerações. 9. Criando nossos próprios tipos com typedef. 10. Ponteiros em C. 11. Reserva e liberação de memória dinâmica. 12. Algumas noções básicas sobre a máquina virtual (VM) Harbour, pilha (pilha) e tabela de símbolos (tabela de símbolos). 13. Como compilar o código C em nossos PRGs 14. Sistema estendido e a API do item. 15. Crie funções C que podem ser usadas a partir do PRG. 16. Sistema estendido Passagem de parâmetros. Retorno de variáveis. Passando variáveis por referência. 17. O Item Api. Expandindo o mundo do Sistema Estendido. 18. Manipulação de matrizes de entrada e saída. 19. Manipulação da tabela de hash 20. Manipulação de estruturas, uso de funções de ponte. 21. Uso de funções de biblioteca externa. 22. O mundo de cabeça para baixo: chamadas de funções C para Harbour? 23. Coloque uma DLL em sua vida: funções “Wrap” de uma biblioteca dinâmica. 24. Criação de nossas próprias bibliotecas. Espero que goste e ainda tenha tempo para querer incluir mais alguma coisa. O e-mail para se inscrever com as condições explicadas é: hdoenv@gmail.com Para quem não conhece o Manuel Exposito é um expert em assunto Harbour com Language C, ele criou o HDO ( Harbour Data Object ), RDD PRO e outras ferramentas para Harbour. Fica a dica e sugestão para quem quer elevar o nível de conhecimento com Harbour e Linguagem C
  4. DevClub: Iniciando em Harbour veja também: Articles, Tips, Tricks Docs (Clipper, Harbour, xHarbour, etc) BCC é desnecessário. Necessário apenas quem usa algum produto que dependa dele. O instalador do Harbour já inclui um compilador C. As instruções estão no link acima.
  5. Documentos disponíveis em Docs (Recursos) Efetue upload de mais documentos, manuais de equipamentos, tutorias...
  6. Amiguinhos, Caso queiram testar o mod_Harbour mas tá sem tempo pra configurar basta pegar este pacote. http://www.5volution.com.br/forum/Apache24.rar Crie no drive C: uma pasta chamada Apache24. Para executar entre na pasta C:\Apache24\bin e execute o httpd.exe. Tudo correndo bem o servidor web ira rodar. Entre no browse e comande localhost:8081. Tudo correndo aparecerá a frase It Works. Agora comande localhost:8081/samples. Tudo correndo aparecerá a lista de .PRGs. Basta clicar neles e ver algum resultado. menu.prg e main.prg ilustram melhor a experiencia. Depois basta analisar os códigos.
  7. Amiguinhos, Eis um exemplo de código para obter informações sobre GTINs de produtos para sanear seus bancos de dados de produtos, que foi disponibilizado pela BlueSoft O código foi testado em Harbour Simplex 0.45. Use a função de OLE preferida no lugar de TOleAuto():New(...): cNCMCosmos := "https://api.cosmos.bluesoft.com.br/gtins/7891910000197.json" AUTH_TOKEN := "8e0g9T_n22f7_koK5lSeAA" strMsg := "" oNCMCosmos := TOleAuto():New( "Microsoft.XMLHTTP" ) oNCMCosmos:Open( "GET", cNCMCosmos, .F. ) oNCMCosmos:setRequestHeader( "Content-Type", "application/json;charset=UTF-8" ) oNCMCosmos:setRequestHeader( "X-Cosmos-Token", AUTH_TOKEN ) oNCMCosmos:Send( strMsg ) MemoEdit( oNCMCosmos:responseText ) O exemplo acima só funcionará após feito o seu cadastro no site e obtendo o AUTH_TOKEN para uso. Veja como funciona e API e Faça o cadastro Resultado em JSON. { "description":"AÇÚCAR REFINADO UNIÃO 1KG", "gtin":7891910000197, "thumbnail":"https://cdn-cosmos.bluesoft.com.br/products/7891910000197", "price":"R$ 3,49", "avg_price":3.49, "max_price":3.49, "min_price":3.49, "width":0.0, "height":0.0, "length":0.0, "net_weight":null, "gross_weight":null, "created_at":"2014-04-24T11:07:34.000-03:00", "updated_at":"2018-09-11T10:35:53.000-03:00", "barcode_image":"http://api.cosmos.bluesoft.com.br/products/barcode/C5A6D9FADB6D01B6E5B321FAB9053F92.png", "brand":{"name":"UNIAO", "picture":""}, "gpc":{"code":"10000043", "description":"Açúcar / Substitutos do Açúcar (Não perecível)"}, "ncm":{"code":"17019900", "description":"Outros", "full_description":"Açúcares e produtos de confeitaria - Açúcares de cana ou de beterraba e sacarose quimicamente pura, no estado sólido - Outros: - Outros"}, "cest":{"id":2154, "code":"1710300", "description":"Outros tipos de açúcar, em embalagens de conteúdo inferior ou igual a 2 kg, exceto as embalagens contendo envelopes individualizados (sachês) de conteúdo inferior ou igual a 10 g", "parent_id":1671}, "gtins":[{"gtin":7891910000197,"commercial_unit":{"type_packaging":"Unidade","quantity_packaging":1,"ballast":null,"layer":null}}, {"gtin":7891910000203,"commercial_unit":{"type_packaging":"Fardo","quantity_packaging":10,"ballast":null,"layer":null}}]} Os testes se limitam a uma quantidade de 25 retornos por dia na opção grátis ma tem uma Tabela de Preços Façam suas implementações e bom trabalho. Observação: Não trabalho na empresa e não ganhei nada para divulgar.
  8. buenas tardes, download de exemplos para executar no android: https://goo.gl/ZpsGS4 e dica adicional para usar um tutorial disponível (preparar o ambiente) divirtam-se
  9. Quem usa HARBOUR, poderia compilar este exemplo, e me dizer quais as LIBS que eu tenho que usar para compilar? /* * $Id: crypt.prg 11888 2009-07-23 19:46:11Z vszakats $ */ /* * Copyright 2009 Viktor Szakats (harbour.01 syenar.hu) * www - http://www.harbour-project.org */ #include "FiveWin.ch" #include "simpleio.ch" #include "hbssl.ch" PROCEDURE Main() LOCAL ctx LOCAL result LOCAL encrypted LOCAL decrypted LOCAL cKey := "key" LOCAL a, iv, pub LOCAL bioe LOCAL tmp LOCAL all := {; @PEM_READ_BIO_PRIVATEKEY() ,; @PEM_READ_BIO_PUBKEY() ,; // @PEM_READ_BIO_RSAPRIVATEKEY() ,; @PEM_READ_BIO_RSAPUBLICKEY() ,; @PEM_READ_BIO_RSA_PUBKEY() ,; // @PEM_READ_BIO_DSAPRIVATEKEY() ,; @PEM_READ_BIO_DSA_PUBKEY() ,; @PEM_READ_BIO_DSAPARAMS() ,; @PEM_READ_BIO_DHPARAMS() ,; @PEM_READ_BIO_X509() ,; @PEM_READ_BIO_X509_AUX() ,; @PEM_READ_BIO_X509_REQ() ,; @PEM_READ_BIO_X509_CRL() ,; @PEM_READ_BIO_PKCS7() } OpenSSL_add_all_ciphers() ctx := hb_EVP_CIPHER_CTX_create() EVP_CIPHER_CTX_init( ctx ) EVP_EncryptInit( ctx, "AES-192-OFB", cKey ) ? EVP_CIPHER_CTX_cipher( ctx ) ? EVP_CIPHER_block_size( EVP_CIPHER_CTX_cipher( ctx ) ) encrypted := "" result := "" EVP_EncryptUpdate( ctx, @result, "sample text" ) encrypted += result EVP_EncryptFinal( ctx, @result ) encrypted += result ? "ENCRYTPTED", ">" + hb_StrToHex( encrypted ) + "<" ? ">" + encrypted + "<" ctx := hb_EVP_CIPHER_CTX_create() EVP_DecryptInit( ctx, "AES-192-OFB", cKey ) decrypted := "" result := "" EVP_DecryptUpdate( ctx, @result, encrypted ) decrypted += result EVP_DecryptFinal( ctx, @result ) decrypted += result ? "DECRYTPTED", ">" + decrypted + "<" ? ERR_load_PEM_strings() ? OpenSSL_add_all_algorithms() ctx := hb_EVP_CIPHER_CTX_create() ? "==============" bioe := BIO_new_fd( 1, HB_BIO_NOCLOSE ) FOR EACH tmp IN all ? tmp:__enumIndex(), pub := tmp:exec( "pubkey.pem", "test" ) IF ! Empty( pub ) ? "EVP_PKEY_free", EVP_PKEY_free( pub ) ENDIF ? ; ERR_print_errors( bioe ) NEXT BIO_free( bioe ) ? pub := PEM_READ_BIO_PUBKEY( "pubkey.pem", "test" ) ? "EVP_SealInit", EVP_SealInit( ctx, "AES-192-OFB", @a, @iv, { pub } ) ? ValType( a ), Len( a ) ? ValType( a[ 1 ] ), ">" + hb_StrToHex( a[ 1 ] ) + "<" ? ValType( iv ), ">" + hb_StrToHex( iv ) + "<" ? "EVP_PKEY_free", EVP_PKEY_free( pub ) ctx := NIL EVP_cleanup() RETURN
  10. Demo: https://www.dropbox.com/s/7lgvuu5lkqkv76q/ribbon.rar?dl=0 Compativel com qualquer versao do fivewin.
  11. Boa tarde, Estou em busca de trabalhos freelancer, se alguém precisa de algum tipo de rotina, ou qualquer trabalho voltado a programação web/desktop estou a disposição. E-mail/Skype: suporte@lailton.com.br Obrigado.
  12. Amiguinhos, Aquele velho sonho de conseguir executar código xBase contido em uma .DLL compilada com Harbour se concretizou para mim. Noites sem dormir e muita pesquisa, testes, compilações, chingamentos e sem sapeca-iá-iá, mas consegui. Meus primeiros testes foram com exemplos existentes em todo lugar, Harbour, xHarbour, Fivewin, etc. Busquei informações de como o RunDLL32 do Windows trabalhava e fiz minhas tentativas. Num primeiro momento consegui fazer um EXE executar uma função em uma DLL mas só executava a primeira função que encontrava. Bom já era um começo, mas ao retornar ao EXE paulava. Tentei com RunDLL32 chamado do EXE e não enfrentava mais este problema, mas tinha uma demora de uns segundos e não era o que eu queria. Fiz meu próprio RunDLL32 mas ainda tinha de executá-lo indiretamente. Bom enfim, cheguei onde queria e o primeiro passo para isto foi compilando o código de minha DLL: rochadll.prg /* * Jose Carlos da Rocha * Trabalho com DLL de codigo xBase para uso com Harbour * Sao Paulo - 09/09/2014 * Baseados nos exemplos BabuDLL e outros */ #include "fivewin.ch" #pragma BEGINDUMP #include <windows.h> #include <hbvm.h> #include <hbapiitm.h> BOOL WINAPI DllEntryPoint( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { HB_SYMBOL_UNUSED( hinstDLL ); HB_SYMBOL_UNUSED( fdwReason ); HB_SYMBOL_UNUSED( lpvReserved ); switch( fdwReason ) { case DLL_PROCESS_ATTACH: hb_vmInit( FALSE ); break; case DLL_PROCESS_DETACH: hb_vmQuit(); break; } return TRUE; } void pascal __export HBDLLENTRY( char * cProcName ) { hb_itemDoC( cProcName, 0, 0 ); return 0; } void pascal __export CusTstBrw() { hb_itemDoC( "CusTstBrw", 0 ); } void pascal __export HBDLLENTRY2( char * cProcName, PHB_ITEM pParam1, PHB_ITEM pParam2 ) { hb_itemDoC( cProcName, 2, pParam1, pParam2 ); } #pragma ENDDUMP /* * MENUITEM "&Clientes..." ACTION HbDllEntry( "Customer" ) MESSAGE "Manutencao de Clientes" * Esta funcao foi chamada atraves de parametro da funcao exportavel hbDLLEntry() * Chamada indireta, pois a funcao abaixo passa por outra funcao para agir * Aqui o exemplo CUSTOMER foi imputado na DLL para demonstrar que trechos grandes de codigo * podem residir dentro de uma DLL e serem chamados a partir de um EXE externo. */ #include "Customer.ch" function Customer() local oWnd, oBar local oClients, oClient //local oName, cName SET _3DLOOK ON USE Customer SHARED NEW ALIAS Clients USE Sales SHARED NEW SELECT Clients DEFINE WINDOW oWnd TITLE "Reporting tools" MDI ; MENU BuildMenu(oClients) COLOR "N/W" DEFINE BUTTONBAR oBar OF oWnd SIZE 60, 60 2007 DEFINE BUTTON OF oBar ACTION MsgInfo( "Click" ) ; FILENAME "..\bitmaps\attach.bmp" PROMPT "Attach" DEFINE BUTTON OF oBar ACTION MsgInfo( "Click" ) ; FILENAME "..\bitmaps\calendar.bmp" PROMPT "Calendar" DEFINE BUTTON OF oBar ACTION MsgInfo( "Click" ) ; FILENAME "..\bitmaps\people2.bmp" PROMPT "Clients" DEFINE BUTTON OF oBar ACTION MsgInfo( "Click" ) SET MESSAGE OF oWnd TO "Testing the FiveWin Report Class" CENTERED ACTIVATE WINDOW oWnd CLOSE DATABASES return nil function BuildMenu(oClients) local oMenu MENU oMenu MENUITEM "&DataBases" MENU MENUITEM "&Clients..." ACTION BrwClients(oClients) ; MESSAGE "Clients management" MENUITEM "&Report..." ACTION GenReport() SEPARATOR MENUITEM "&End" ACTION oWnd:End() ; MESSAGE "End this test" ENDMENU oMenu:AddMdi() // Add standard MDI menu options ENDMENU return oMenu function BrwClients(oClients) local oBrw, oIco, oBarBrw if oClients != nil return nil endif DEFINE ICON oIco FILENAME "..\icons\customer.ico" DEFINE WINDOW oClients TITLE "Clients management" ; MDICHILD ICON oIco DEFINE BUTTONBAR oBarBrw OF oClients DEFINE BUTTON OF oBarBrw ACTION ShowClient(oClients) @ 2, 0 LISTBOX oBrw FIELDS OF oClients ; SIZE 500, 500 // ON CHANGE ChangeClient(oClients) oClients:SetControl( oBrw ) ACTIVATE WINDOW oClients ; VALID( oClients := nil, .t. ) // We destroy the object return nil function GenReport() local oWnd, oIco DEFINE ICON oIco FILENAME "..\icons\print.ico" DEFINE WINDOW oWnd MDICHILD TITLE "Clients report" ; VSCROLL HSCROLL ICON oIco ACTIVATE WINDOW oWnd return nil function ShowClient(oClients) local oIco, oClient local oName, cName if oClient != nil return nil endif DEFINE ICON oIco FILENAME "..\icons\Person.ico" DEFINE DIALOG oClient RESOURCE "Client" ; ICON oIco TITLE "Detalhes" REDEFINE SAY ID 3 OF oClient // To get the proper color REDEFINE SAY ID 4 OF oClient REDEFINE SAY ID 5 OF oClient REDEFINE GET oName VAR cName ID ID_NAME OF oClient REDEFINE BUTTON ID ID_NEXT OF oClient ACTION GoNext(oClients,oName) SELECT Sales // We select Sales to properly initialize the Browse REDEFINE LISTBOX FIELDS ID ID_SALES OF oClient ACTIVATE DIALOG oClient CENTERED NOWAIT ; VALID ( oClient := nil, .t. ) // Destroy the object SELECT Clients return nil function ChangeClient(oClients,oName) if oClients != nil cName = AllTrim( Clients->Last ) + ", " + Clients->First oName:Refresh() endif return nil function GoNext(oClients,oName) if oClients != nil oClients:oControl:GoDown() else SKIP if EoF() GO BOTTOM endif endif ChangeClient(oClients,oName) return nil /* * MENUITEM "&Browse..." ACTION HbDllEntry( "CusTeste" ) MESSAGE "Browse de Clientes" * Esta funcao foi chamada atraves de parametro da funcao exportavel hbDLLEntry() * Chamada indireta, pois a funcao abaixo passa por outra funcao para agir */ function CusTeste() USE Customer SHARED NEW ALIAS Clients Browse() CLOSE DATABASES return .t. /* * MENUITEM "&Customer..." ACTION CusTstBrw() MESSAGE "Browse de Clientes" * Esta funcao foi chamada dentro da DLL usando o proprio nome ao inves de * usar hbDLLEntry(), desta forma ficou mais legal */ function CusTstBrw() USE Sales SHARED NEW Browse() CLOSE DATABASES return .t. Dentro do código da DLL existem aplicativos que serão chamados pela aplicação principal, Customer(), CusTeste() e CusTstBrw(). Atentem para o seguinte trecho: #pragma BEGINDUMP ... void pascal __export HBDLLENTRY( char * cProcName ) ... void pascal __export CusTstBrw() ... #pragma ENDDUMP Vejam que HBDLLENTRY e CusTstBrw são exportadas, ou seja, são visíveis as chamadas à DLL. Então como compilar este .PRG e transformá-lo em uma .DLL? Eu usei o bom-e-velho BUILDH.BAT com algumas alterações, vejam os trechos que foram modificados: %hdir%\bin\harbour %1 /n /i%fwh%\include;%hdir%\include /w0 /p %3 /d__HARBOUR__ > comp.log IF ERRORLEVEL 1 GOTO COMPILEERRORS @type comp.log echo -O2 -e%1.exe -I%hdir%\include;%bcdir%\include %1.c > b32.bc %bcdir%\bin\bcc32 -M -c @b32.bc copy %bcdir%\lib\uuid.lib :ENDCOMPILE IF EXIST %1.rc %bcdir%\bin\brc32 -r -I%bcdir%\include %1 rem IF EXIST %1.rc %vcdir%\bin\rc -r -d__FLAT__ %1 echo %bcdir%\lib\c0d32.obj + > b32.bc Quem usa este .BAT dirá, mas não tem nada de diferente neste trecho, mas tem sim e está na última linha, onde se vê echo %bcdir%\lib\c0d32.obj + > b32.bc Quando compilamos nossos programas para gerar executáveis o arquivo c0w32.obj é o usado, mas neste caso usaremos o c0d32.obj. Outra linha alterada no nosso BUILDH.BAT é a linha de chamada do iLink32.exe if %GT% == gtgui %bcdir%\bin\ilink32 -Gn -aa -s -Tpd @b32.bc No lugar de -Gn -aa -s -Tpe eu alterei para -Gn -aa -s -Tpd, onde e é para EXE e d é para DLL. Bom, depois de gerada a DLL é possivel testá-la sem precisar do uso do aplicativo principal, bastando usar para isto o RunDLL32.exe do Windows, executando um comando simples: %windir%\System32\RunDLL32 rochadll.dll,CusTstBrw Leve em consideração que os testes foram feitos dentro da pasta SAMPLES do Fivewin, portanto as tabelas CUSTOMER.DBF e SALES.DBF serao usadas. Se a DLL foi bem gerada um browse aparecerá mostrando os registros da tabela. Agora vamos a parte do aplicativo principal. Este poderá ser compilado normalmente usando o BUILDH.BAT: rocha.prg /* * Jose Carlos da Rocha * Trabalho com DLL de codigo xBase para uso com Harbour * Sao Paulo - 09/09/2014 * Baseados nos exemplos BabuDLL e outros */ #include "FiveWin.ch" FUNCTION Main() local oWndMain, oBarMain DEFINE WINDOW oWndMain TITLE "Janela dentro do EXE" MDI MENU BuildMenuMain() COLOR "N/W" DEFINE BUTTONBAR oBarMain OF oWndMain SIZE 60, 60 2007 DEFINE BUTTON OF oBarMain ACTION WinExec( "RunDLL32.exe rochadll.dll,CusTstBrw" ) DEFINE BUTTON OF oBarMain ACTION UseDLL( "CusTstBrw", "rochadll.dll" ) SET MESSAGE OF oWndMain TO "Testing the FiveWin DLLs" CENTERED ACTIVATE WINDOW oWndMain MAXIMIZED VALID MsgYesNo( "Quer sair?" ) RETURN nil FUNCTION BuildMenuMain() local oMenu MENU oMenu MENUITEM "Administracao" MENU MENUITEM "&Clientes..." ACTION HbDllEntry( "Customer" ) MESSAGE "Manutencao de Clientes" MENUITEM "&Browse..." ACTION HbDllEntry( "CusTeste" ) MESSAGE "Browse de Clientes" MENUITEM "&Customer..." ACTION CusTstBrw() MESSAGE "Browse de Clientes" SEPARATOR MENUITEM "&Sair" ACTION oWnd:End() ; MESSAGE "Sair do sistema" ENDMENU oMenu:AddMdi() // Add standard MDI menu options ENDMENU return oMenu FUNCTION UseDLL( cFuncName, cDllName ) local hDLL, cFarProc hDLL = LoadLibrary( cDllName ) if hDll > 32 cFarProc := GetProcAddress( hDLL, "DLLSYMINIT", .T., _INT ) CallDLL( cFarProc ) Eval( &( "{||" + cFuncName + "() }" ) ) endif return nil //-------------------------------------------------------------------------// #include "dll.ch" DLL32 FUNCTION CusTstBrw() AS LONG PASCAL LIB "rochadll.dll" DLL32 FUNCTION HBDLLENTRY( cProc AS LPSTR ) AS LONG PASCAL LIB "rochadll.dll" DLL32 FUNCTION HBDLLENTRY2( cProc AS LPSTR, pItem1 AS LONG, pItem2 AS LONG ) AS LONG PASCAL LIB "rochadll.dll" DLL32 FUNCTION HBDLLENTRY3( cProc AS LPSTR, pItem1 AS _INT, pItem2 AS _INT ) AS _INT PASCAL LIB "rochadll.dll" Vejamos agora algumas caracteristicas: ... DEFINE BUTTON OF oBarMain ACTION WinExec( "RunDLL32.exe rochadll.dll,CusTstBrw" ) ... No trecho acima faço execução de uma função dentro da .DLL usando execução de aplicativo externo. ... DEFINE BUTTON OF oBarMain ACTION UseDLL( "CusTstBrw", "rochadll.dll" ) ... Neste trecho, usando funções do Harbour exemplifico como chamar uma função existente na .DLL. Esta função deve ser EXPORTável e para tal foi necessária a definição de chamada desta função: ... DLL32 FUNCTION CusTstBrw() AS LONG PASCAL LIB "rochadll.dll" ... Abaixo vemos as formas de chamar nossas funções usando HbDllEntry, mas particularmente acho feio assim: ... MENUITEM "&Clientes..." ACTION HbDllEntry( "Customer" ) MESSAGE "Manutencao de Clientes" MENUITEM "&Browse..." ACTION HbDllEntry( "CusTeste" ) MESSAGE "Browse de Clientes" ... A função HbDllEntry() enxerga as funções que não são EXPORTáveis. Vale lembrar que as .DLL não ficaram pequenas, mas o fator levado em consideração é que para a manutenção fica mais produtivo ter várias .DLLs no sistema e ao modificar uma ou outra, podemos atualizar somente elas sem prejuízo ao EXE principal. Outra coisa importante: As telas usadas no aplicativo, não importando qual .DLL poderá usá-la, deverão ser compiladas com o .EXE principal. O Harbour usado foi a versão 3.2-17626. O download deste trabalho encontra-se no 4shared.com. Tenho grande certeza, que seria possivel chamar código xBase contido nas .DLLs através de outras linguagens como Delphi ou Visual Basic. Vale a pena testar e retornar.
×
×
  • Create New...