BYREF PARA BYVAL ENTRE DLLS

RHUANDRY 15/09/2011 11:48:34
#384332
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
ASHKATCHUP 15/09/2011 17:03:23
#384362
Resposta escolhida
Como assim? Para onde, no teu código, tu tem que retornar dados?
RHUANDRY 15/09/2011 18:02:59
#384369
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...
ASHKATCHUP 15/09/2011 23:19:14
#384403
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...
RHUANDRY 16/09/2011 14:26:52
#384469
Obrigado, pela disposição em me ajudar parceiro.
ainda estou na luta com essa quebra-cabeça.
ASHKATCHUP 16/09/2011 14:59:52
#384476
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
RHUANDRY 16/09/2011 15:43:34
#384481
se você puder fazer esse favor pra mim, fico realmente grato.
Obrigado!
RHUANDRY 22/09/2011 12:41:16
#384953
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.

Tópico encerrado , respostas não são mais permitidas