DLL - SO PARA OS FERRAS
Beleza galera?
O problema é o seguinte;
Ha alguns anos resolvi tarnsforma quase todas as minhas rotinas em uma única dll. Nesta DLL tinha um método chamado dataExpira(data as string), na qual eu informava uma data para a dll rodar. Só que ha alguns meses perdi o código desta dll. de lá para cá venho fazendo gambiaras para driblar este método. A DLL só rodará até 06/05/2008. Me falaram que eu poderia fazer uma nova DLL na qual dentro dela eu faria refencia a dll antiga, sobreescrevendo a mesma, e nesta nova dll eu passaria novos parâmetros para a data.
Alguem sabe como fazer isso????
O problema é o seguinte;
Ha alguns anos resolvi tarnsforma quase todas as minhas rotinas em uma única dll. Nesta DLL tinha um método chamado dataExpira(data as string), na qual eu informava uma data para a dll rodar. Só que ha alguns meses perdi o código desta dll. de lá para cá venho fazendo gambiaras para driblar este método. A DLL só rodará até 06/05/2008. Me falaram que eu poderia fazer uma nova DLL na qual dentro dela eu faria refencia a dll antiga, sobreescrevendo a mesma, e nesta nova dll eu passaria novos parâmetros para a data.
Alguem sabe como fazer isso????
bom se vc fez esse dll no vb vá no "Object Browser" (Pressione F2 na tela principal do vb). Agora clique com o esquerdo dentro do "Object Browser" e selecione "Reference..." e nessa nova janela selecione "Browser". agora selecione o seu dll. e de ok. No "Object Browser" tem dois combobox. No primeiro clique e selecione o seu dll. Se você esqueceu veja um por um e no ListBox da direita aparece todas as funções dentro do dll. Agora é só você executar a função dataExpira e pronto.
olha, não sei como está implementada a sua funcionalidade de validação, mas quando falamos em criar referência podemos fazê-lo pelo menu Project >> References e assim selecionando a sua DLL
assim você poderá tipar a variavel com a sua dll mas, mesmo assim, será preciso instanciar a classe com o 'new nomedll' e isso irá disparar a sua validação.
de qualquer forma é uma tentativa
uma dúvida, você definiu a validação no Class_Initialize() ?
NÃO é NADA DISSO, DEIXE EU SER MAIS DIRETO ENTÃO, EXISTE UM DESCOMPILADOR QUE REALMENTE FUNCIONE PARA DLL ?????
não, uma dll está em linguagem de máquina, qualquer descompilador que você utilize ira gerar para você o código Ascii
O ideal e voce reescrever todo seu codigo da dll antiga mantendo as mesmas declaracoes e metodos que utilizava.
Passei por uma experiencia semelhante, e nao teve jeito, tive que reescrever do zero tudo mas mantendo os nomes e parametros de tudo para evitar incompatibilidade.
Passei por uma experiencia semelhante, e nao teve jeito, tive que reescrever do zero tudo mas mantendo os nomes e parametros de tudo para evitar incompatibilidade.
Valeu Webmaster, só que não estou afim de reescrever tudo. Repito: Um colega certa vez me falou que bastava eu criar uma nova dll fazendo referencia a antiga e nela utilizar o método que eu queira modificar.Só não sei como fazer isso...
Pode me ajudar ???
Pode me ajudar ???
Edilson, axo que o que seu colega disse foi fazer uma nova Dll que recebe a data de hoje, faz uma nova validação e depois disso manda uma data retroativa que seja válida para sua dll antiga funcionar ...
Poxa, isto não é complicado ... da mesma forma que sua aplicação VB utiliza a dll que irá expirar sua nova dll irá utilizá-la.
Só que a aplicação VB vai precisar se referenciar a nova Dll e não mais a antiga.
Consegui ser claro quanto a possibilidade de criar um mecanismo que sempre envie data válida a dll antiga mesmo recebendo data atual ?
1º No VB existe várias formas de criarmos objetos, mas suponhamos que vc, após fazer referencia ànova dll "MyNewDll" (Menu Prjects/References), criou via código um objeto para manipulação (Pode não ter nada a ver com seu código, lamento ... mas é a forma que considero mais profissional)
2- Na nova DLL temos um método qualquer que retorne int
3- Vamos ver a Função RetorneInteger na nova DLL como seria
Teriamos um código meio parecido com recursividade, mas não exatamente isto.
Observação, pode ficar mais lento dependendo o tipo de processamento que é realizado por tal dll ou pela quantidade de chamadas que fazemos a ela.
Observação2, Por favor, evite utilizar um parametro data como string ... o tempo de processamento de uma data é infinitamente mais rápido que o de uma string.
Uma string será observada caracter por caracter e aplicado um código asc a cada um enquanto a data toda será transformada em único double e qualquer operação do tipo DateAdd, DateDiff ou comparações será executada melhor e mais rapidamente além de não precisar nunca de format.
Mas o maior inconveniente é que tratando datas como string temos um problema laskado para lidar com conversões de dd/mm/yy para mm/dd/yy e vice-versa com datas onde não seja explÃÂÂcita a ordenação tipo "05/04/2007".
Creio que todos programadores tiveram este tipo de problemas no inÃÂÂcio da carreira justamente por que trabalhar com string aparentemente é mais fácil.
Poxa, isto não é complicado ... da mesma forma que sua aplicação VB utiliza a dll que irá expirar sua nova dll irá utilizá-la.
Só que a aplicação VB vai precisar se referenciar a nova Dll e não mais a antiga.
Consegui ser claro quanto a possibilidade de criar um mecanismo que sempre envie data válida a dll antiga mesmo recebendo data atual ?
1º No VB existe várias formas de criarmos objetos, mas suponhamos que vc, após fazer referencia ànova dll "MyNewDll" (Menu Prjects/References), criou via código um objeto para manipulação (Pode não ter nada a ver com seu código, lamento ... mas é a forma que considero mais profissional)
dim i as Integer
dim objMYDLL as MyNewDll
set objMYDLL as New MyNewDll
2- Na nova DLL temos um método qualquer que retorne int
i = objMYDLL.RetorneInteger(a,b,c)
3- Vamos ver a Função RetorneInteger na nova DLL como seria
'Na nossa nova DLL teriamos uma refertencia a antiga Dll "MyOldDll"
Public Function RetorneInteger(ParamA,ParamB,ParamC) as integer
dim objMYDLL as MyOldDll
set objMYDLL as New MyOldDll
RetorneInteger = objMYDLL.RetorneInteger(ParamA,ParamB,ParamC)
exit function
Teriamos um código meio parecido com recursividade, mas não exatamente isto.
Observação, pode ficar mais lento dependendo o tipo de processamento que é realizado por tal dll ou pela quantidade de chamadas que fazemos a ela.
Observação2, Por favor, evite utilizar um parametro data como string ... o tempo de processamento de uma data é infinitamente mais rápido que o de uma string.
Uma string será observada caracter por caracter e aplicado um código asc a cada um enquanto a data toda será transformada em único double e qualquer operação do tipo DateAdd, DateDiff ou comparações será executada melhor e mais rapidamente além de não precisar nunca de format.
Mas o maior inconveniente é que tratando datas como string temos um problema laskado para lidar com conversões de dd/mm/yy para mm/dd/yy e vice-versa com datas onde não seja explÃÂÂcita a ordenação tipo "05/04/2007".
Creio que todos programadores tiveram este tipo de problemas no inÃÂÂcio da carreira justamente por que trabalhar com string aparentemente é mais fácil.
Beleza Emerson_Tadeu, acho que é por ai. Só me explica melhor estas funções, que parâmetros são estes? e em que momento irei chamar a função que altera a data( expiraData(data as string) ) ?
Se você não tiver acesso àfunção na DLL o que pode ser feito é injetar código diretamente na memória quando o programa estiver rodando para redirecionar a chamada para outro ponto onde você poderá interceptá-la e definir uma nova data. Eu costumo usar a biblioteca Detours da Microsoft que facilita bastante esse tipo de operação em C++. Procure por Detours e API Hooking para ter maiores detalhes de como funciona.
Amigo, sinceramente !!!! o que vc quer é tão complicado quanto vc criar outra DLL, pois com certeza, outras funcionalidades existem na dll, e sendo assim, poderá haver diversos outros problemas......
Agora uma pergunta, naum tinha nenhum backup dos códigos fontes ?????
Vasculhe ae.....talvez vc consiga recuperar e se livra desse tormento.......
Agora uma pergunta, naum tinha nenhum backup dos códigos fontes ?????
Vasculhe ae.....talvez vc consiga recuperar e se livra desse tormento.......
Tópico encerrado , respostas não são mais permitidas