Avatar billede kxh Nybegynder
07. oktober 2004 - 08:55 Der er 4 kommentarer og
1 løsning

Control Library - Kontroller om den findes

Hej

Jeg har for første gang lavet et Control Library, og har derfor
et spørgsmål, nemlig når man kalder dll filen fra en applikation, kan man så kontrollere om dll filen findes, da jeg synes den fejl som opstår hvis den mangler er meget lidt sigende for en almindelig bruger..

Hilsen
Kim
Avatar billede snepnet Nybegynder
07. oktober 2004 - 09:30 #1
hej kim.

det er vel også almindelig praksis at man styrer de fejlmeddelelser der vises til brugeren - det er begrænset hvor mange af de generiske fejlmeddelelser der giver særlig meget mening for en almindelig bruger.

men bortset fra det, så er det meget nemt at undersøge om en given "fysisk" fil eksisterer... til det kan du benytte System.IO.File.Exists(<path>)

Afhængig af hvad du laver, kan frameworket af sig selv kigge flere steder når det forsøges at loade en dll, så jeg vil ikke umiddelbart anbefale at du laver checket ved at kigge efter den fysiske fil.

kan du ikke vise mig den kode du bruger, så skal jeg nok give et bud.

mvh
Avatar billede kxh Nybegynder
07. oktober 2004 - 09:37 #2
Hej igen

Imports dll_navn

Public ini as new dll_IniFile.IniFile("Application.ini")
Avatar billede arne_v Ekspert
09. oktober 2004 - 00:11 #3
Det kan ikke lade sig gøre ved normal brug da dependent DLL bliver loadet af .NET
runtime inden din kode starter og du derfor ikke har mulighed for at kontrollere
fejl.

Hvis du bruger reflection til at loade med kan du godt catche fejlen.

Eksempel følger.

Util.vb
-------

Imports System

Public Class Util
    Public Shared Function Test
        Console.WriteLine("Det virker")
    End Function
End Class

Test.vb
-------

Imports System

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Try
            Util.Test()
        Catch
            Console.WriteLine("Vi snuppede fejlen")
        End Try
    End Sub
End Class

Test2.vb
--------

Imports System
Imports System.Reflection

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Try
            Dim o As Object = [Assembly].Load("Util").CreateInstance("Util")
            o.GetType().InvokeMember("Test", _
                                    BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Static Or BindingFlags.InvokeMethod, _
                                    Nothing, Nothing, Nothing)
        Catch
            Console.WriteLine("Vi snuppede fejlen")
        End Try
    End Sub
End Class

Forsøg 1
--------

C:\E>vbc /t:library Util.vb
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.


C:\E>vbc /t:exe /r:Util.dll Test.vb
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.


C:\E>test
Det virker

C:\E>del *.dll

C:\E>test

Unhandled Exception: System.IO.FileNotFoundException: File or assembly name Util
, or one of its dependencies, was not found.
File name: "Util"
  at TestClass.Main(String[] args)

=== Pre-bind state information ===
LOG: DisplayName = Util, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = C:\E\
LOG: Initial PrivatePath = NULL
Calling assembly : Test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.
===

LOG: Application configuration file does not exist.
LOG: Policy not being applied to reference at this time (private, custom, partia
l, or location-based assembly bind).
LOG: Post-policy reference: Util, Version=0.0.0.0, Culture=neutral, PublicKeyTok
en=null
LOG: Attempting download of new URL file:///C:/E/Util.DLL.
LOG: Attempting download of new URL file:///C:/E/Util/Util.DLL.
LOG: Attempting download of new URL file:///C:/E/Util.EXE.
LOG: Attempting download of new URL file:///C:/E/Util/Util.EXE.

Forsøg 2
--------

C:\E>vbc /t:library Util.vb
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.


C:\E>vbc /t:exe Test2.vb
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.


C:\E>test2
Det virker

C:\E>del *.dll

C:\E>test2
Vi snuppede fejlen
Avatar billede snepnet Nybegynder
09. oktober 2004 - 02:03 #4
sorry kxh - den her havdde jeg svedt ud - det må du undskylde kxh.
håber du kan bruge det arne skrev.
mvh
Avatar billede arne_v Ekspert
24. oktober 2004 - 21:34 #5
kxh ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester