Sobre DLL's
Moderador: Moderadores
Sobre DLL's
Pessoal, a pergunta pode parecer idiota, mas é que será de grabnde ajuda se funcionar...
no clipper tem como eu usar alguma DLL que tenha sido criada no windows??
Pergunto porque tenho alguns exemplos de uso de DLL no clipper, então, se eu desenvolver uma DLL em alguma linguagem para o Windows, será que eu poderia usá-la no clipper??
no clipper tem como eu usar alguma DLL que tenha sido criada no windows??
Pergunto porque tenho alguns exemplos de uso de DLL no clipper, então, se eu desenvolver uma DLL em alguma linguagem para o Windows, será que eu poderia usá-la no clipper??
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
Na verdade, a DLL não é bem do windows...
É uma dll, criada usando Turbo Pascal, que possui uma função, que envia arquivos para a impressão, sendo que, ele lista as impressoras disponíveis no SO e permite escolher a impressora que se deseja usar... Ele impreime em impresoras USB, na Rede (impressoras ligadas a outros computadores e impressoras ligadas Diretamente na Rede - que possuem placa de rede). Se funcionar eu vou disponibilizar essa lib para a galera aqui.
É uma dll, criada usando Turbo Pascal, que possui uma função, que envia arquivos para a impressão, sendo que, ele lista as impressoras disponíveis no SO e permite escolher a impressora que se deseja usar... Ele impreime em impresoras USB, na Rede (impressoras ligadas a outros computadores e impressoras ligadas Diretamente na Rede - que possuem placa de rede). Se funcionar eu vou disponibilizar essa lib para a galera aqui.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Nenhuma .DLL poderá ser usada diretamente no Clipper pois o mesmo é totalmente baseado na estrutura de 16 bits.
Uma .DLL tem seu código escrito usando estrutura 32bits.
Explicando melhor:
O Clipper só entende nomes de funções com 10 ou 12 caracteres de tamanho, exemplo:
function recno()
function dbUseArea()
Se voce criar uma função com mais de 12 caracterse o Clipper até poderá manusea-la mas para ele ela só tera 10 ou 12 de tamanho, exemplo:
function AbrePortaDeImpressora( qual )
function AbrePortaDeImpressoraUSB( qual )
function AbrePortaDeImpressoraCOM( qual )
No exemplo acima o Clipper poderá compilar estas funções mas só reconhecerá a primeira delas, pois vera todas com o mesmo nome:
function AbrePortaDeI( qual )
Já usando o Fivewin, mesmo com o Blinker ele necessita de funções acessórias para usar as funções dentro de .DLLs. Neste caso o Fivewin faz uso da API do Windows via função DLL32.
Exemplo:
/*
* Programador: Jose Carlos da Rocha
* Descricao..: Modulo de PDV
* CopyRights.: SoftClever Informatica
*/
#include "fivewin.ch"
#include "dll.ch"
static cTexto := "Aguarde um pouco...", oSay3
static hBmtDLL
static cBmtDll := "bemaFI32.dll"
static nPortaECF := 1 // 1=COM1 2 = COM2
*************
function main()
* Colocar Inicio do Aplicativo para abrir a porta uma vez so'.
if ! file(cBmtDll)
MsgAlert("Arquivo "+cBmtDLL+" não encontrado"," Componente ausente")
return
endif
hBmtDLL = LoadLibrary(cBmtDll)
? Bmt_AbreCupom( "999999999.99" )
FreeLibrary(hBmtDll)
SysRefresh()
return .T.
DLL32 FUNCTION Bmt_AbreCupom( cCGC AS LPSTR ) AS LONG PASCAL ;
FROM "Bematech_FI_AbreCupom" LIB "bemaFI32.dll"
Veja que no código acima faço uso de minha função exemplo Bmt_AbreCupom() que faz referencia à função interna Bematech_FI_AbreCupom dentro da DLL bemaFI32.dll.
Voce obterá mais exito se passar a usar Clipper puro com Harbour, fazendo uso de suas caracteristicas internas com um uso mais eficiente das API do Windows via um compilador mais 32bits como Borland C++.
@braços :?)
Nenhuma .DLL poderá ser usada diretamente no Clipper pois o mesmo é totalmente baseado na estrutura de 16 bits.
Uma .DLL tem seu código escrito usando estrutura 32bits.
Explicando melhor:
O Clipper só entende nomes de funções com 10 ou 12 caracteres de tamanho, exemplo:
function recno()
function dbUseArea()
Se voce criar uma função com mais de 12 caracterse o Clipper até poderá manusea-la mas para ele ela só tera 10 ou 12 de tamanho, exemplo:
function AbrePortaDeImpressora( qual )
function AbrePortaDeImpressoraUSB( qual )
function AbrePortaDeImpressoraCOM( qual )
No exemplo acima o Clipper poderá compilar estas funções mas só reconhecerá a primeira delas, pois vera todas com o mesmo nome:
function AbrePortaDeI( qual )
Já usando o Fivewin, mesmo com o Blinker ele necessita de funções acessórias para usar as funções dentro de .DLLs. Neste caso o Fivewin faz uso da API do Windows via função DLL32.
Exemplo:
/*
* Programador: Jose Carlos da Rocha
* Descricao..: Modulo de PDV
* CopyRights.: SoftClever Informatica
*/
#include "fivewin.ch"
#include "dll.ch"
static cTexto := "Aguarde um pouco...", oSay3
static hBmtDLL
static cBmtDll := "bemaFI32.dll"
static nPortaECF := 1 // 1=COM1 2 = COM2
*************
function main()
* Colocar Inicio do Aplicativo para abrir a porta uma vez so'.
if ! file(cBmtDll)
MsgAlert("Arquivo "+cBmtDLL+" não encontrado"," Componente ausente")
return
endif
hBmtDLL = LoadLibrary(cBmtDll)
? Bmt_AbreCupom( "999999999.99" )
FreeLibrary(hBmtDll)
SysRefresh()
return .T.
DLL32 FUNCTION Bmt_AbreCupom( cCGC AS LPSTR ) AS LONG PASCAL ;
FROM "Bematech_FI_AbreCupom" LIB "bemaFI32.dll"
Veja que no código acima faço uso de minha função exemplo Bmt_AbreCupom() que faz referencia à função interna Bematech_FI_AbreCupom dentro da DLL bemaFI32.dll.
Voce obterá mais exito se passar a usar Clipper puro com Harbour, fazendo uso de suas caracteristicas internas com um uso mais eficiente das API do Windows via um compilador mais 32bits como Borland C++.
@braços :?)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
O Clipper só irá linkar código Clipper, C/C++( com API Clipper) ou Assembler.
O código compilado pelo Pascal não será entendido.
Voce poderá criar um executável stand-alone no pascal e chamá-lo via RUN no Clipper assim como o SMTPSEND.EXE.
Se voce pretende imprimir para qualquer impressora use o Clipper mesmo, aqui no forum foram postadas varias dicas, inclusive esta:
command.com /c copy /b Arquivo porta, exemplo:
command.com /c copy /b NomeDoArquivo.txt LPT1
command.com /c copy /b NomeDoArquivo.txt \\servidor\estacao\impressora
@braços :?)
O Clipper só irá linkar código Clipper, C/C++( com API Clipper) ou Assembler.
O código compilado pelo Pascal não será entendido.
Voce poderá criar um executável stand-alone no pascal e chamá-lo via RUN no Clipper assim como o SMTPSEND.EXE.
Se voce pretende imprimir para qualquer impressora use o Clipper mesmo, aqui no forum foram postadas varias dicas, inclusive esta:
command.com /c copy /b Arquivo porta, exemplo:
command.com /c copy /b NomeDoArquivo.txt LPT1
command.com /c copy /b NomeDoArquivo.txt \\servidor\estacao\impressora
@braços :?)
Colega... juro pra você que tentei fazer isso... só que por exemplo, eu tenho aqui na empresa, uma impressora que possui uma placa de rede e é colocada direto no switch... os computadores imprimem nela através de seu IP (pego automaticamente)... não possui porta nem compartilhamento... mas isso não chega a ser um problema, pois criei uma solução propria (tipo a do Vagner) chamda printdos, que até enviei a alguns usuários aqui do fórum.... mas é que eu tava pensando em implementar de forma a ficar mais simples ao programador...
Mas me tira uma dúvida... olhando no source do clipper, vi que tem alguns arquivos .pas (extensão do pascal) que possuem nome de funções do clipper... isso não significaria que existe possibilidade de se colocar código pascal no clipper, assim como se faz com o C/C++ ??
Mas me tira uma dúvida... olhando no source do clipper, vi que tem alguns arquivos .pas (extensão do pascal) que possuem nome de funções do clipper... isso não significaria que existe possibilidade de se colocar código pascal no clipper, assim como se faz com o C/C++ ??
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
A tempos atras veio ao mercado uma ferramenta nota 1000 chamada MIRO.
Com ela voce produzia aplicativos praticamente sem programar.
Foi então que a apareceu o MIRO PLUS que gerava aplicativos para Delphi.
O que a MIRO INFORMATICA fez, implementou para Pascal várias funções Clipper e depois surgiu um conjunto de funções Clipper, em Pascal, para serem utilizadas no Delphi.
O Clipper é totalmente feito em C e portanto compativel com rotinas em C/C++( usando uma API ) e assembler, ou seja, os objetos gerador nestas linguagem podem ser ligados ao Clipper, mas em Pascal não pois seu objeto espera ser ligado à outras funções do Pascal.
Talvez voce obtenha algum exito se Dissasemblar o objeto Pascal e com um MASM( Microsoft Assembler ) ou TASM( Turbo Assembler ) , depura-lo e gerar o objeto para ligar ao Clipper.
Pegue o TASM e o MASM em UpSeros
@braços :?)
A tempos atras veio ao mercado uma ferramenta nota 1000 chamada MIRO.
Com ela voce produzia aplicativos praticamente sem programar.
Foi então que a apareceu o MIRO PLUS que gerava aplicativos para Delphi.
O que a MIRO INFORMATICA fez, implementou para Pascal várias funções Clipper e depois surgiu um conjunto de funções Clipper, em Pascal, para serem utilizadas no Delphi.
O Clipper é totalmente feito em C e portanto compativel com rotinas em C/C++( usando uma API ) e assembler, ou seja, os objetos gerador nestas linguagem podem ser ligados ao Clipper, mas em Pascal não pois seu objeto espera ser ligado à outras funções do Pascal.
Talvez voce obtenha algum exito se Dissasemblar o objeto Pascal e com um MASM( Microsoft Assembler ) ou TASM( Turbo Assembler ) , depura-lo e gerar o objeto para ligar ao Clipper.
Pegue o TASM e o MASM em UpSeros
@braços :?)
Obrigado rochinha pela explicação...
E quanto ao miro... eu usei tanto a versão que gerava pra clipper, quanto a do delphi... mas não gostei muito não... trabalhei numa empresa que usava essa ferramenta e mudaram para o Gas Pró (na minha opinião muito melhor)....
Mas vou tentar fazer do jeito que você disse... desassemblar e recriar os objetos usando TASM... vou ver se funciona, e se funcionar, mando o arquivo pra download.
E quanto ao miro... eu usei tanto a versão que gerava pra clipper, quanto a do delphi... mas não gostei muito não... trabalhei numa empresa que usava essa ferramenta e mudaram para o Gas Pró (na minha opinião muito melhor)....
Mas vou tentar fazer do jeito que você disse... desassemblar e recriar os objetos usando TASM... vou ver se funciona, e se funcionar, mando o arquivo pra download.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
Obrigado rochinha pela explicação...
E quanto ao miro... eu usei tanto a versão que gerava pra clipper, quanto a do delphi... mas não gostei muito não... trabalhei numa empresa que usava essa ferramenta e mudaram para o Gas Pró (na minha opinião muito melhor)....
Mas vou tentar fazer do jeito que você disse... desassemblar e recriar os objetos usando TASM... vou ver se funciona, e se funcionar, mando o arquivo pra download.
E quanto ao miro... eu usei tanto a versão que gerava pra clipper, quanto a do delphi... mas não gostei muito não... trabalhei numa empresa que usava essa ferramenta e mudaram para o Gas Pró (na minha opinião muito melhor)....
Mas vou tentar fazer do jeito que você disse... desassemblar e recriar os objetos usando TASM... vou ver se funciona, e se funcionar, mando o arquivo pra download.
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
Realmente, dei uma pesquisada e realmente não tem como eu usar uma dll ou criar uma lib com objetos pascal no clipper...
Mas descobri que, se eu compilar os programas no TurboPascal, e pegar os objetos, eu consigo construir uma ovl que posso usar no clipper, compilando ela com o Blinker...
)
Fica aí uma pequena dica.... encontrei esse exemplo na pasta do blinker.. Muito legal.. Agora vou ser se monto minha ovl com as funções da impressora e se der certo, mando aqui pro site pra galera...
Mas descobri que, se eu compilar os programas no TurboPascal, e pegar os objetos, eu consigo construir uma ovl que posso usar no clipper, compilando ela com o Blinker...
Fica aí uma pequena dica.... encontrei esse exemplo na pasta do blinker.. Muito legal.. Agora vou ser se monto minha ovl com as funções da impressora e se der certo, mando aqui pro site pra galera...
</body><body bgcolor=blue><h3>O ser humano que deixa de sonhar, deixa de viver...</h></body>
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Eu tinha alguns objetos de pascal aqui de teste e é possivel usar eles em clipper, desde que não usem rotinas envolvidas nas units do pascal.
Quanto a rotina, a DLL provavelmente é 32bits se ela usa tais rotinas para acesso as impressoras e para poder fazer o relatorios gráfico.
Você poderá usar esta DLL sem problema com xHarbour fazendo sua inclusão via C ou mesmo usando a dll diretamente, ou até mesmo se não quiser usar a DLL convertar ela em uma lib para ser linkada junto com o EXE.
Quanto a rotina, a DLL provavelmente é 32bits se ela usa tais rotinas para acesso as impressoras e para poder fazer o relatorios gráfico.
Você poderá usar esta DLL sem problema com xHarbour fazendo sua inclusão via C ou mesmo usando a dll diretamente, ou até mesmo se não quiser usar a DLL convertar ela em uma lib para ser linkada junto com o EXE.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Só pegando carona.
Como o Vagner postou, voce poderá transformar uma .DLL numa .LIB usando um aplicativo encontrado no Borland C++ 5.5 chamado implib
Comando:
IMPLIB biblioteca.LIB dll.DLL
Nem sempre uma .DLL poderá ser transformada em .LIB pois muitas vezes elas contem resources extras ou são somente .DLLs de resources( dialogos, botões, dados de versão ). Então uma .DLL de 1Mb poderá gerar uma .LIB de 10K.
@braços :?)
Só pegando carona.
Como o Vagner postou, voce poderá transformar uma .DLL numa .LIB usando um aplicativo encontrado no Borland C++ 5.5 chamado implib
Comando:
IMPLIB biblioteca.LIB dll.DLL
Nem sempre uma .DLL poderá ser transformada em .LIB pois muitas vezes elas contem resources extras ou são somente .DLLs de resources( dialogos, botões, dados de versão ). Então uma .DLL de 1Mb poderá gerar uma .LIB de 10K.
@braços :?)
