Toon posts:

[C#] Klasse uit assembly halen?? (d.m.v. reflection)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben nu een MDI applicatie aan het maken waarbij de gebruiker een dll bestand opgeeft en deze vervolgens wordt geopend. (de DLL draait dan in de applicatie)

Het dll bestand is een Class Library. Hier staan wat klassen in en zo ook een Form. Nu wil ik dus dat een venster uit dat DLL bestand wordt laten zien in de applicatie.

Nu weet ik dus wel dat je dit met reflection moet doen, maar mijn vraag is dan ook of je het venster als klasse kan krijgen.
Je krijgt dus met reflection een Type. Je kan dus wel van een klasse een Type maken, maar kan dat ook omgekeerd? Dus van Type naar een klasse.

Zoiets als (pseudo code)
code:
1
Form frm = baseType.GetClass(...);


Dus ik wil een klasse eruit kunnen krijgen netzoals je dit bij een referentie zou hebben

Alvast bedankt.

[ Voor 6% gewijzigd door Verwijderd op 07-11-2003 13:11 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20-08 22:11

mulder

ik spuug op het trottoir

Zodra je die een classe uit die assembly kan instantieeren kun je die class een form terug laten geven lijkt me zo.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Als je het Type hebt, kan je er idd een object van instantieren, als je dat bedoeld.

Je moet eens naar de Activator Class kijken:

code:
1
Activator.CreateInstance ( aType );

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Of Assembly object. Die heeft hij al als het goed is, omdat hij die nodig heeft voor reflection. Het voordeel van de Assembly.CreateInstance() is dat je een string op kunt geven van de class naam, dus niet een type nodig hebt, maar bv:
code:
1
2
3
4
5
6
7
8
9
10
Assembly databaseDriver = Assembly.LoadFrom(assemblyFilename);
string completeClassPath = className;
if(namespaceToUse.Length > 0)
{
    // there is a namespace specified, add it
    completeClassPath = namespaceToUse + "." + className;
}

// create the instance
IDBDriver toReturn = (IDBDriver)databaseDriver.CreateInstance(completeClassPath);

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
EfBe schreef op 07 november 2003 @ 13:38:
Of Assembly object. Die heeft hij al als het goed is, omdat hij die nodig heeft voor reflection. Het voordeel van de Assembly.CreateInstance() is dat je een string op kunt geven van de class naam, dus niet een type nodig hebt
Dat kan je met de CreateInstance van de Activator Class ook dacht ik, maar die overloaded method geeft dan geen type object terug, maar een object van het type ObjectHandle oid.
De CreateInstance die een type neemt, geeft wel een object terug.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Geweldig!! Ik heb het nu gedaan met de Activator klasse en het werkt goed.. dat had ik net even nodig.. ;)

Bedankt allen

[ Voor 16% gewijzigd door Verwijderd op 07-11-2003 14:09 ]

Pagina: 1