ThorstenBehrens
Ensign
- Registriert
- Juli 2008
- Beiträge
- 134
Hai!
Präfix ist wohl eher: VisualStudio, aber das wird nicht angeboten.
Ich hänge schon seit einiger Zeit an dem Problem, daß eine/mehrere DLLs zur Laufzeit offenbar nicht gefunden werden. Die Projektaufteilung kann weiter unten gefunden werden. Ich bekomme zur Laufzeit den Fehler
Kann mir da jemand einen Hinweis geben, wo ich - noch - die Fehlerursache suchen könnte.
Die Aufrufhierarchie ist bis dahin folgende:
- Private Sub Test (VisualBasic-Testprogramm) ruft
-- public static void CGraphic.InitGraphicDLL (C# Klassenbibliothek) auf, die über eine Wrapperfunktion
--- PLplot_plsdev wiederum
---- die von einer DLL exportierte Routine plsdev aufruft.
Genau bei dem letzten Aufruf wird mir o.a. Ausnahme geworfen.
Ich habe sowohl für die VisualBasic- als auch für die C#-Anteile zwei parallele Verzeichnisse geschaffen. Die benötigten DLLs befinden sich im Suchpfad und zusätzlich habe ich sie nochmal in *alle* Debug/Release-Verzeichnisse sowohl des VisualBasic als auch des C#-Verzeichnisses kopiert.
In der C#-Klassenbibliothek werden die benötigten Routinen mittels eines Wrappers importiert:
Ein "direktes" Einfügen der DLLs in das Projekt (über den Projektmappen-Explorer -> Verweis hinzufügen ...) ist nicht möglich, weil die externen DLLs nicht mit .NET (?) erstellt worden sind (Fehlermeldung dann: "Es konnte kein Verweis auf ... hinzugefügt werden. Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist").
Die von der DLL exportierten Routinen habe ich mit dem DLL Export Viewer überprüft. Würden die aber nicht stimmen, so würde ich auch eine andere Fehlermeldung erwarten.
Projekt-Hintergrund:
Momentan ist der tatsächliche Inhalt des Projektes noch eine Spielwiese. Lediglich die folgende Aufteilung steht bereits:
Es wird ein VisualBasic-Program geben, welches eine Klassenbibliothek aufruft, die in C# (evtl. auch C++) geschrieben ist. Diese Klassenbibliothek wiederum verwendet externe Bibliotheken (Open Source DLLs).
Die Klassenbibliothek wird in C#/C++ geschrieben werden müssen, weil das dem Kunden so verkauft worden ist
Das bereits existierende Test- bzw. Steuerprogramm ist in Visualbasic entwickelt worden, weshalb hier an der Sprache/Entwicklungsumgebung auch nicht zu rütteln ist.
Persönlicher Hintergrund:
Ich habe zwar jahrelange Erfahrung in der Programm-/Projektentwicklung, allerdings nur wenig Erfahrung in den diversen Sprößlingen der C-Familie und schon gar keine Erfahrung in der VisualStudio-Umgebung.
Gruß,
Thorsten
Präfix ist wohl eher: VisualStudio, aber das wird nicht angeboten.
Ich hänge schon seit einiger Zeit an dem Problem, daß eine/mehrere DLLs zur Laufzeit offenbar nicht gefunden werden. Die Projektaufteilung kann weiter unten gefunden werden. Ich bekomme zur Laufzeit den Fehler
Code:
Eine Ausnahme (erste Chance) des Typs "System.DllNotFoundException" ist in CGrafik.dll aufgetreten.
Kann mir da jemand einen Hinweis geben, wo ich - noch - die Fehlerursache suchen könnte.
Die Aufrufhierarchie ist bis dahin folgende:
- Private Sub Test (VisualBasic-Testprogramm) ruft
-- public static void CGraphic.InitGraphicDLL (C# Klassenbibliothek) auf, die über eine Wrapperfunktion
--- PLplot_plsdev wiederum
---- die von einer DLL exportierte Routine plsdev aufruft.
Genau bei dem letzten Aufruf wird mir o.a. Ausnahme geworfen.
Ich habe sowohl für die VisualBasic- als auch für die C#-Anteile zwei parallele Verzeichnisse geschaffen. Die benötigten DLLs befinden sich im Suchpfad und zusätzlich habe ich sie nochmal in *alle* Debug/Release-Verzeichnisse sowohl des VisualBasic als auch des C#-Verzeichnisses kopiert.
In der C#-Klassenbibliothek werden die benötigten Routinen mittels eines Wrappers importiert:
Code:
[DllImport("plplot.dll")]
protected static extern void plsdev(string devname);
// Methode die es ermöglicht von C# aus auf die dll zuzugreifen
public static void PLplot_plsdev(string devname)
{
plsdev(devname);
}
Ein "direktes" Einfügen der DLLs in das Projekt (über den Projektmappen-Explorer -> Verweis hinzufügen ...) ist nicht möglich, weil die externen DLLs nicht mit .NET (?) erstellt worden sind (Fehlermeldung dann: "Es konnte kein Verweis auf ... hinzugefügt werden. Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist").
Die von der DLL exportierten Routinen habe ich mit dem DLL Export Viewer überprüft. Würden die aber nicht stimmen, so würde ich auch eine andere Fehlermeldung erwarten.
Projekt-Hintergrund:
Momentan ist der tatsächliche Inhalt des Projektes noch eine Spielwiese. Lediglich die folgende Aufteilung steht bereits:
Es wird ein VisualBasic-Program geben, welches eine Klassenbibliothek aufruft, die in C# (evtl. auch C++) geschrieben ist. Diese Klassenbibliothek wiederum verwendet externe Bibliotheken (Open Source DLLs).
Die Klassenbibliothek wird in C#/C++ geschrieben werden müssen, weil das dem Kunden so verkauft worden ist

Persönlicher Hintergrund:
Ich habe zwar jahrelange Erfahrung in der Programm-/Projektentwicklung, allerdings nur wenig Erfahrung in den diversen Sprößlingen der C-Familie und schon gar keine Erfahrung in der VisualStudio-Umgebung.
Gruß,
Thorsten