Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 07:22

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Apr 13, 2007 13:20 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich hab hier nem einfaches .NET Project angefangen, welche dynamisch Assemblies (DLL´s) lädt und mir den nen Wert per Methode ausgeben lassen soll, mehr nicht.

Wo es hängt ist beim typecast, nachdem ich die Instanz erstellt habe.

Hier mal code dazu: (Sry VB.NET, aber spielt keine rolle bei .NET !)

Library Basis Interface: (Wird benutzt von der Anwendung und der Assembly, sind in beiden Projekten 1:1 gleich)
Code:
  1.  
  2. Public Interface ILibImport
  3.     Function GetName() As String
  4. End Interface
  5.  


Assembly: (Klassenbibliothek)
Code:
  1.  
  2. Public Class ImportLib
  3.     Implements ILibImport
  4.     Function GetName() As String Implements ILibImport.GetName
  5.         Return "Import Library 1"
  6.     End Function
  7. End Class
  8.  


Anwendung: (Windows-Anwendung)
Code:
  1.  
  2. Public Class frmMain
  3.     Public AppPath As String
  4.     Public LibsPath As String
  5.  
  6.     Private Sub RefreshLibs()
  7.         Dim aLibFiles() As String = System.IO.Directory.GetFiles(LibsPath, "*.dll")
  8.         For i As Integer = 0 To aLibFiles.Length - 1
  9.             Dim OneImportLibAssembly As Reflection.Assembly = Reflection.Assembly.LoadFrom(aLibFiles(i))
  10.             Dim ShortAssemblyName As String = OneImportLibAssembly.FullName
  11.             Dim CommaPos As Integer = ShortAssemblyName.IndexOf(",")
  12.             ShortAssemblyName = ShortAssemblyName.Remove(CommaPos, ShortAssemblyName.Length - CommaPos)
  13.             Dim ImportLibType As Type = OneImportLibAssembly.GetType(ShortAssemblyName + "." + "ImportLib")
  14.             If ImportLibType IsNot Nothing Then
  15.                 Dim InpLib As ILibImport = OneImportLibAssembly.CreateInstance(ImportLibType.FullName)
  16.             End If
  17.         Next
  18.     End Sub
  19.  
  20.     Private Sub btnReloadLibs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReloadLibs.Click
  21.         RefreshLibs()
  22.     End Sub
  23.  
  24.     Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  25.         AppPath = Application.StartupPath
  26.         If AppPath.Length > 0 Then If Not AppPath.EndsWith("\") Then AppPath += "\"
  27.         LibsPath += AppPath + "libs\"
  28.     End Sub
  29. End Class
  30.  


Wenn ich nun die RefreshLibs methode ausführe, lädt er die assembly, raucht aber dann bei:

Code:
  1.  
  2. Dim InpLib As ILibImport = OneImportLibAssembly.CreateInstance(ImportLibType.FullName)
  3.  


ab mit dem fehler: InvalidCastException: Unable to cast object of type 'ImportLib1.ImportLib' to type 'LibLoader.ILibImport'.

Was ist da faul ?

Wie gesagt, die ILibImport datei ist in beiden projekten zu 100% gleich.

Ein Manueles CType, also type cast geht ebenso wenig:
Code:
  1.  
  2. Dim InpLib As ILibImport = CType(OneImportLibAssembly.CreateInstance(ImportLibType.FullName), ILibImport)
  3.  




Ich hab leider keine grosse ahnung von .NET, ich kanns ohne eure hilfe nicht lösen.

Hab übrigens mich auf folgende Docu bezogen:
http://www.thescripts.com/forum/thread48325.html


Danke,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 13, 2007 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das Interface ILibImport muss in eine gemeinsame Assembly. Jedenfalls darf es nur einmal deklariert werden. Typen gelten nur als identisch, wenn sie auch aus der gleichen Assembly sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 13, 2007 14:48 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Jo habs gemerkt, dieses doc hat mir geholfen:

http://dotnet-magazin.de/itr/features/psecom,id,129,nodeid,76.html

Jetzt gehts nachdem ich einfach das Basis Interface als Library gemacht habe und in beiden anderen Projekten als Verweis hinzugefügt =)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]