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.
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
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.