DLL - SO PARA OS FERRAS

USUARIO.EXCLUIDOS 29/05/2007 21:22:33
#218783
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????
USUARIO.EXCLUIDOS 29/05/2007 23:05:42
#218787
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.
MAIGUI 29/05/2007 23:09:17
#218788

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() ?
USUARIO.EXCLUIDOS 30/05/2007 13:12:56
#218893
NÃO é NADA DISSO, DEIXE EU SER MAIS DIRETO ENTÃO, EXISTE UM DESCOMPILADOR QUE REALMENTE FUNCIONE PARA DLL ?????
MAIGUI 31/05/2007 15:57:31
#219153
não, uma dll está em linguagem de máquina, qualquer descompilador que você utilize ira gerar para você o código Ascii
WEBMASTER 31/05/2007 19:28:40
#219227
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.
USUARIO.EXCLUIDOS 31/05/2007 21:43:28
#219246
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 ???
USUARIO.EXCLUIDOS 01/06/2007 03:40:54
#219262
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)


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.
USUARIO.EXCLUIDOS 01/06/2007 18:57:12
#219422
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) ) ?


MORDOR 01/06/2007 20:52:06
#219428
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.

LCSD 01/06/2007 21:10:04
#219429
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.......
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas