Die verflixten DLLs

IRQ

Mitglied
Hi @ll,

so langsam verzweifle ich mit den DLLs bei C#.

Situation:
Ich hab eine normale Windows Anwendung programmiert die Mails versenden soll. Da die interne SmtpMail Klasse keine Benutzer und Kennwörter unterstützt, wollte ich auf eine externe DLL zugreifen.
Dabei habe ich die Datei jmail.dll von http://www.dimac.net gefunden und diese mit einem Verweis in mein Projekt eingefügt. Soweit so gut. Dabei wird im bin Verzeichnis eine Datei mit dem Namen Interop.jmail.dll erstellt, die allerdings statt 301kb nur noch 44kb gross ist. Nun ja, lassen wir uns davon nicht aufhalten. Wenn ich nun allerdings das Programm starten will, so erscheint beim ersten Aufruf von Funktionen dieser DLL (die übrigens wunderbar im Visual Studio erscheint und auf deren Klassen der Zugriff auch prima funktioniert, zumindest beim Entwickeln) die Meldung:
"Das COM-Objekt mit der CLSID <lange HexNummer> ist ungültig oder wurde nicht registriert."

Also habe ich mich ein bisschen schlau gemacht und dabei herausgefunden, dass man mit regsvr32.exe solche DLLs registrieren kann.

Damit funktioniert dann das Programm auch. Allerdings stehe ich nun vor einem recht seltsamen Problem. Wenn ich das Programm (die .exe) auf andere Computer verteile (die .net Framework 1.1 installiert haben) so muss ich sowohl die Interop.jmail.dll als auch die jmail.dll (OriginalDatei) mitliefern und letztgenannte erst noch manuell registrieren.

Dazu nun meine Frage: Ist das normal, dass man beide DLLs hinübernehmen muss? Kann man das umgehen? Schön wäre so eine Installationsdatei wie ein .msi File oder zumindest eine kleine Routine die das Programm installiert auch wenn der User keine Ahnung von Computer hat (so ein Ein-Klick-und-installiert-Programm).
Zusatzfrage: Kann man das nicht irgendwie ohne Registrierung machen? Denn bei der Registrierung wird ja immer auch der Pfad gespeichert und falls die Datei verschoben wirds gehts bereits nicht mehr. Am besten wäre es so, dass das Programm einfach im eigenen Verzeichnis nach der DLL sucht und auf diese ohne Registrierung zugreifen kann.

Vielen Dank für eure Antworten.
 

Alexander Schuc

crazy-weasel
Hi,

diese DLL die du da benutzt ist eine COM/Active-X - DLL und deswegen muss sie auf dem System auf welchem du sie verwendest registrieren.

OpenSmtp.Net
Unter dem oben genannten Link findest du eine E-Mail Komponente geschrieben in C#. Sprich, ist eine .net DLL die du einfach verwenden kannst ohne das du sie auf anderen System registrieren musst.

Ich hoffe du kannst sie gebrauchen.

Mfg,
Alex
 

IRQ

Mitglied
Nochmals vielen Dank, aber bei mir hat die Seite noch funktioniert.

[EDIT]Funktioniert übrigens einwandfrei, die OpenSmtp DLL[/EDIT]
 
Zuletzt bearbeitet: