BYREF PARA BYVAL ENTRE DLLS
Olá pessoal, gostaria de saber se alguem já passou pela seguinte situação!
- tenho uma dll da Bematech e estou desenvolvendo outra com várias impressoras através do Select Case. O problema é o seguinte:
Não posso alterar o sistema de origem pois já está homologado pelo PAF-ECF.
Nas declarações de funções do sistema de origem, as referencias da dll estão com parametros ByVal, mas tenho que retornar dados para essas variaveis, no sistema de origem. Não sei como fazer, alguém pode dar uma ajuda?
[ô]SISTEMA DE ORIGEM
Public Declare Function Bematech_FI_DadosUltimaReducao Lib [Ô]BEMAFI32.DLL[Ô] (ByVal DadosReducao As String) As Integer
[ô]DLL GENERICA - minha dll
Public Function Bematech_FI_DadosUltimaReducao(ByVal DadosReducao As String) As Integer
On Error GoTo Erro:
Call RetornaImpressora
Select Case MarcaECF
Case [Ô]BEMATECH[Ô]
Case [Ô]DARUMA[Ô]
Bematech_FI_DadosUltimaReducao = rRetornarInformacao_ECF_Daruma([Ô]140[Ô], DadosReducao)
Case [Ô]ELGIN[Ô]
Bematech_FI_DadosUltimaReducao = Elgin_DadosUltimaReducao(DadosReducao)
Case [Ô]EPSON[Ô]
Bematech_FI_DadosUltimaReducao = EPSON_Obter_Dados_Ultima_RZ(DadosReducao)
Case [Ô]SWEDA[Ô]
Bematech_FI_DadosUltimaReducao = ECF_DadosUltimaReducao(DadosReducao)
Case [Ô]URANO[Ô]
End Select
Exit Function
Erro:
MsgBox [Ô]Erro na Função (Bematech_FI_DadosUltimaReducao)[Ô], vbCritical, [Ô]Atenção[Ô]
End Function
- tenho uma dll da Bematech e estou desenvolvendo outra com várias impressoras através do Select Case. O problema é o seguinte:
Não posso alterar o sistema de origem pois já está homologado pelo PAF-ECF.
Nas declarações de funções do sistema de origem, as referencias da dll estão com parametros ByVal, mas tenho que retornar dados para essas variaveis, no sistema de origem. Não sei como fazer, alguém pode dar uma ajuda?
[ô]SISTEMA DE ORIGEM
Public Declare Function Bematech_FI_DadosUltimaReducao Lib [Ô]BEMAFI32.DLL[Ô] (ByVal DadosReducao As String) As Integer
[ô]DLL GENERICA - minha dll
Public Function Bematech_FI_DadosUltimaReducao(ByVal DadosReducao As String) As Integer
On Error GoTo Erro:
Call RetornaImpressora
Select Case MarcaECF
Case [Ô]BEMATECH[Ô]
Case [Ô]DARUMA[Ô]
Bematech_FI_DadosUltimaReducao = rRetornarInformacao_ECF_Daruma([Ô]140[Ô], DadosReducao)
Case [Ô]ELGIN[Ô]
Bematech_FI_DadosUltimaReducao = Elgin_DadosUltimaReducao(DadosReducao)
Case [Ô]EPSON[Ô]
Bematech_FI_DadosUltimaReducao = EPSON_Obter_Dados_Ultima_RZ(DadosReducao)
Case [Ô]SWEDA[Ô]
Bematech_FI_DadosUltimaReducao = ECF_DadosUltimaReducao(DadosReducao)
Case [Ô]URANO[Ô]
End Select
Exit Function
Erro:
MsgBox [Ô]Erro na Função (Bematech_FI_DadosUltimaReducao)[Ô], vbCritical, [Ô]Atenção[Ô]
End Function
Como assim? Para onde, no teu código, tu tem que retornar dados?
foi idealizado assim.
- Aplicativo
- Minha dll
- Dll dos fabricantes de impressoras fiscais
tenho que retornar dados para o aplicativo, da Dll_Fabricante para a MinhaDll e depois para o Aplicativo.
Lembrando que o aplicativo não pode ser modificado.
o parametros são passados por byval (valores), mas tenho que retornar como se fossem byref(referencia).
tá dificil...
- Aplicativo
- Minha dll
- Dll dos fabricantes de impressoras fiscais
tenho que retornar dados para o aplicativo, da Dll_Fabricante para a MinhaDll e depois para o Aplicativo.
Lembrando que o aplicativo não pode ser modificado.
o parametros são passados por byval (valores), mas tenho que retornar como se fossem byref(referencia).
tá dificil...
Brother, que gambiarra isso!
Sinceramente não acho que seja posivel tu [Ô]overlodear[Ô] já que ta definido como ByVal e tu nao quer mecher.
MAS
Você pode alterar a memória do teu software para alterar o valor das variáveis.
Se não surgir outra idéia, posso te ajudar com isso. Sò que seria ULTIMA instancia, ja que trabalhar alterando a memória é perigoso...
Sinceramente não acho que seja posivel tu [Ô]overlodear[Ô] já que ta definido como ByVal e tu nao quer mecher.
MAS
Você pode alterar a memória do teu software para alterar o valor das variáveis.
Se não surgir outra idéia, posso te ajudar com isso. Sò que seria ULTIMA instancia, ja que trabalhar alterando a memória é perigoso...
Obrigado, pela disposição em me ajudar parceiro.
ainda estou na luta com essa quebra-cabeça.
ainda estou na luta com essa quebra-cabeça.
Tu realmente nao tem como alterar o teu software? Hoje de noite, depois da aula, vou criar um exemplo de edição de memória pra ti.
E ai posto aqui =D
E ai posto aqui =D
se você puder fazer esse favor pra mim, fico realmente grato.
Obrigado!
Obrigado!
e aÃ, pessoal!
Consegui resolver o meu problema mudando de linguagem, nosso querido VBZAO não reconhece esses parametros. A linguagem que utilizei é a mesma que as fabricantes usam, Delphi.
Tô encerrando o tópico!
Obrigado ao usuário ASHKATCHUP por ter se disponibilizado em me ajudar.
Consegui resolver o meu problema mudando de linguagem, nosso querido VBZAO não reconhece esses parametros. A linguagem que utilizei é a mesma que as fabricantes usam, Delphi.
Tô encerrando o tópico!
Obrigado ao usuário ASHKATCHUP por ter se disponibilizado em me ajudar.
Tópico encerrado , respostas não são mais permitidas