|
Postada em 19/10/2010 15:25 hs
Caros colegas, boa tarde!!!
Para facilitar, estou migrando algumas rotinas do meu sistema feito em VB6 para execução através de DLL, porém estou apanhando na declaração e acesso as funções desta DLL.
Criei uma DLL com nome de 'IMPRESSOES.DLL' e dentro desta DLL, possui uma classe chamada 'IMPR_TH' e a seguinte rotina de exemplo: Public Sub ImprimeCabecalho() Printer.FontSize = 10 Printer.Print "Linha1" Printer.Print "Linha2" Printer.Print "Linha3" Printer.Print "Linha4" Printer.Print "Linha5" Printer.EndDoc End Sub
Já no projeto em desenvolvimento VB6, declarei num módulo a seguinte expressão: Public Declare Sub ImprimeCabecalho Lib "IMPRESSOES.DLL" ()
e para chamar a função estou utilizando no formulário, através de um Botão a chamada a rotina ImprimeCabecalho
Porém, ao executar o programa e pressionar o referido botão ele apresenta o seguinte erro:
Run-time error '453' Can't find DLL entry point ImprimeCabecalho in IMPRESSOES
Ou seja, consta que não foi possível localizar o ponto de entrada de ImprimeCabecalho na Dll Impressoes. Porém eu já rodei todo o código e não consigo solucionar o problema e todos os nomes referidos estão corretos.
Gostaria muito de declarar através do código, pois terei uma dll para cada tipo de impressora e me facilitaria caso fosse desse jeito ao contrário de declará-la no menu references e criar os objetos depois. Porém, não estou conseguindo identificar o que falta.
Alguem tem alguma consideração a fazer para solucionar o problema???
Desde já agradeço a todos.
Ronan Afonso
|
|
|
|
|
Postada em 19/10/2010 16:46 hs
Vc ja fez o teste da dll agrupando num projeto ou usa a dll referenciada no projeto, no ultimo caso vc tem que registrar no regsvr32. e se a dll foi alterada nas propiedades do projeto da dll que vc criou vc tem que colocar compatibilidade de versao ao compilar
|
|
|
Treze
|
SÃO VICENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 19/10/2010 17:13 hs
assim colega
Private Declare Function Imprimir Lib "impressoes.dll" () As Long
Private Sub Command1_Click() Dim Imprimir As New IMPR_TH Imprimir.ImprimeCabecalho End Sub
|
|
|
|
Postada em 20/10/2010 11:37 hs
Juan Carlos, registrei a dll e através do referenciamento e criando um novo objeto eu consegui acessar sim. Porém, como disponibilizarei várias dll's que se referem a cada tipo de impressora e o sistema utilizará somente uma das impressoras, pensei que este seria a melhor forma, ou seja, declarando a dll via código e não através da referência, que me daria mais trabalho ainda, pois caso surja uma nova impressora/dll eu teria que compilar novamente o executável.
Acredito que o meu problema está em exportar as funções da DLL mesmo, coisa que não fiz e ainda não manjo direito na elaboração dela. Há esta possibilidade de exportar tendo em vista que criei uma DLL que não é Standard???
|
|
|
|
Postada em 20/10/2010 11:57 hs
Olha, vc pode colocar nessa dlls todos os tipos de impresora. No projeto vc so vai chamar a referenciada para o tipo de impresora. Se vc não quer mexer no .exe poderia usar com arquivos ini para a impresora selecionada. E so sera necesario compilar a dll una vez mais, e as alterações vc pode referenciar no arquivo.ini. cabecalhoimpresora1 cabecalhoimpresora2 cabecalhoimpresora3 O exemplo do treze é bom
|
TÓPICO EDITADO
|
|
|
|
|
Postada em 20/10/2010 15:44 hs
Juan, vou fazer isso sim. Porém, uma outra dúvida, se tiver jeito: Como eu posso instanciar o objeto de forma dinâmica, ou seja, em tempo de execução, sendo ele vindo de um parâmetro(registro do windows, ini ou BD), ou seja, a classe sendo dinâmica?
Dim Imprimir As New (Parâmetro) 'pois teria várias classes as quais seriam as impressoras Imprimir.ImprimeCabecalho
Obrigado pela ajuda!!! Agradeço a todos!!!
|
TÓPICO EDITADO
|
|
|
|