03. februar 2005 - 16:38Der er
15 kommentarer og 1 løsning
FileNotFoundException med inkluderet DLL-fil.
Hej. Jeg sidder og leger med at få et C# program og en C# dll (begge hjemmelavede) til at fungere sammen. Det virker fint og uden problemer.
Men hvis man sletter dll filen, vil programmet naturligvis fejle med en System.IO.FileNotFoundException.
Jeg har dog lidt problemer med at omskrive denne exception så der bare kommer en messagebox ala MessageBox.Show("Ingen fil!");
Jeg er kommet frem til den konklusion, at den kode, der skal til, må skulle placeres i classens constructor og at det sikkert er noget try-catch (jeg har prøvet file- altså
public Form1() { // Her skal jeg gerne have noget try-catch eller lign. ind // som giver fejlhåndtering på indlæsningen af dll'en. InitializeComponent(); }
Håber, I kan hjælpe :)
- Som en ekstra note, så har jeg forsøgt mig med:
if(!File.Exists("w32mtopr.dll")) { MessageBox.Show("Filen findes ikke!"); Application.Exit(); }
... Som ikke virker - den kaster stadig en exception.
Jeg vil lige prøve at kigge på det. Har fundet en side, jeg vil dog ikke afvise at jeg kan få brug for hjælp til et konkret eksempel af Assembly.Load :)
Nu har jeg så ikke lavet dll'en som en del af projektet, men som en separat dll fil - så følgende virker ikke (dll'en ligger i samme bibliotek som .exe filen):
object o = Assembly.Load("w32mtopr.dll").CreateInstance("DllClass1"); textBox1.Text = o.GetType().InvokeMember("PrintText", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, o, null).ToString();
Som et andet spørgsmål -
o.GetType().InvokeMember("DinMetode", [...]
Hvordan gør man her, hvis ens metode tager argumenter? Mest fordi at metodenavnet er skrevet i string-quotes. F.eks. hvis metoden hed DinMetode(a, b).
Okay, nu er jeg kommet lidt videre, jeg skal tydeligvis kalde dll-filen som "navn" istedetfor "navn.dll". Men et andet problem er så kommet - endnu en exception -
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.