21. december 2009 - 13:01Der er
11 kommentarer og 1 løsning
C# loade en dll, instantiere et objekt og kommunikere med det
Hej,
Jeg har et program A, som skal kommunikere med program B (begge skrevet i C#). Kommunikationen skal foregå via et simpelt interface, som jeg definerer. Hvordan gør man det?
Jeg har forsøgt følgende: B er kompileret som en .exe og A starter B sådan her:
System.Diagnostics.Process.Start( "c:\\b.exe" );
Det virker fint i den forstand, at B starter op, men hvordan snakker jeg med den via interfacet?
Jeg har også forsøgt dette: B er kompileret som en .dll (det er en Form, som desuden implementerer MyInterface) og A gør følgende:
Hvordan gør man EGENTLIG? Jeg vil bare have A og B til at snakke sammen gennem et interface. Det burde være nemt, synes jeg, men kan sgutte lige hitte ud af det.
Men det må da være muligt at program A loader B.dll og kalder en metode i den? Mit nuværende problem er helt banalt.
I roject B bygger jed nedenstående som en dll: namespace MyClassLibrary { public class B { public B() { }
public static B Handshake() { return new B(); }
public int AddNumbers( int val1, int val2 ) { return val1 + val2; } } }
I project A bygger jeg nedenstående som en Windows app. (jeg har added B.dll som en reference til projektet): public partial class Form1 : Form { public Form1() { InitializeComponent(); Assembly asm = Assembly.LoadFile( "B.dll" ); Object obj = asm.CreateInstance( "MyClassLibrary.B" ); // OK MyClassLibrary.B myB = (MyClassLibrary.B)obj; // Invalid cast exception } }
System.InvalidCastException was unhandled Message="[A]ClassLibrary.B cannot be cast to [B]ClassLibrary.B. Type A originates from 'ClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location 'Projects\\ClassLibrary\\ClassLibrary\\bin\\Debug\\B.dll'. Type B originates from 'ClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'Projects\\CSharpLoadDll\\CSharpLoadDll\\bin\\Debug\\ClassLibrary.dll'."
Jeg er ikke helt med på, hvad jeg skal stille op med dén fejlmeddelelse.
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.