LIBERAR DLL - SET NOTHING

WHELLNET 03/07/2012 09:01:21
#405402
Fala galera, bom dia!

Estou com um probleminha de liberação de DLL.
Seguinte, utilizo uma DLL de terceiros e preciso verificar a versão dela, com intuito de saber se preciso ou não aplicar a atualização. Então desenvolvi a função:

Private Function RetVersao() As Integer
[ô]On Error Resume Next
[ô]Err.Clear
Dim NFe As Object, x As String
Set NFe = CreateObject([Ô]NFe_Util_2G.Util[Ô])
If Err.Number = 0 Then
x = NFe.versao [ô]<- função da dll que me retornar a versão
[ô]aqui abaixo eu só trato o resultado, pra ficar em forma de número
x = Mid(x, InStr(1, x, [Ô]v[Ô], vbTextCompare) + 1, 4)
x = Replace(x, [Ô].[Ô], [Ô][Ô])
If IsNumeric(Right(x, 1)) = False Then
x = Left(x, Len(x) - 1) & Format(Asc(Right(x, 1)) - 96, [Ô]00[Ô])
Else
x = x & [Ô]00[Ô]
End If
End If
RetVersao = Int(x)
Set NFe = Nothing
End Function


O problema é que mesmo setando ela como Nothing, quando vou fazer o desregistro ela não deixa, por estar sendo utilizada por outro aplicativo (no caso o meu mesmo).

Há alguma forma mais eficiente de liberar esta DLL?

Obrigado!
ALEVALE 03/07/2012 09:49:24
#405406
Pergunta :

[Ô]Esse processo não seria mais fácil você realizar na entrada da sua aplicação ?[Ô], assim não seria necessário carregar nenhuma DLL inicialmente...

ou fazer um EXE somente para atualização ele verifica a atualização no sistema e caso não encotre nenhuma atualização chama o outro EXE principal.
A maioria das aplicações fazem dessa forma justamente por causa desses problemas.
MARCELO.TREZE 03/07/2012 10:17:43
#405411
o problema acredito eu é que vc deve estar fazendo referencia desta dll em project / references, e depois declara uma variavel( NFe) do tipo object, e o que o nothing faz é encerrar apenas esta variavel, e não a dll, pois ela está na referencia do programa..

o certo seria vc chamar esta dll em uma variavel publica em um módulo

ex:

Public Declare Function capCreateCaptureWindow Lib [Ô]avicap32.dll[Ô] Alias [Ô]capCreateCaptureWindowA[Ô] (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long



bom não sei como fazer com sua dll mas este acima seria o caminho mais certo entendeu

WHELLNET 04/07/2012 11:30:22
#405501
ALEVALE
Acredito que vou ter que fazer este procedimento mesmo. Ja havia pensado nisto também

MARCELO-TREZE
Não a referencio. Estou criando ela pelo método late binding conforme código. Acredito que chama-la conforme descrito vá causar o mesmo efeito pelo função create. Talvez pior ainda, pois estão declarando ela, e no late binding apenas a instancio.

Vou ver se alguem ja passou por isso senão vou fazer como o ALEVALE sugeriu.

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