[C#] DLL's als embedded resource

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MewBie
  • Registratie: April 2002
  • Laatst online: 23:48
Waarschijnlijk doe ik iets heel simpels fout, maar ik kom er echt niet uit... :/

Ik ben bezig met een C# programmaatje om wat zoekwerk te vereenvoudigen.
Ik heb een map met 2300+ bestanden die gewoon als text uitgelezen kunnen worden, er is een extern programma dat de data uit deze files om kan toveren in een thumbnail die ook te zien is in de Windows Explorer.

Het prog dat ik gemaakt heb haalt de voor mij belangrijke data uit de bestanden en geeft ze in een mooie tabel weer, incl zoek functie. So far so good.
Het probleem zit hem in de thumbnails. Aangezien ik op mijn laptop Win7 draai heb ik de WindowsAPICodePack gedownload en de benodigde .dll als reference toegevoegd aan het project.
Om vervolgens met behulp van de ShellFile.ThumbNail mogelijkheden de thumbnail door het externe programma te laten maken en in mijn programma weer te geven.
Dit werkt enigszins ok, zeer regelmatig lukt het niet om een thumbnail weer te geven terwijl in Explorer wel een thumbnail te zien is, ik vermoed dat het externe programma er dan te lang over doet om de bestanden te verwerken en de thmubnail te genereren.

Dit levert me echter 2 DLL's op die ik los bij het programma moet houden en deze wil ik graag embedded in de .exe hebben. Hiervoor heb ik de DLL's als embedded resource toegevoegd, maar om een of andere reden wil het maar niet lukken om dat werkend te krijgen.

Op een heleboel websites gebruiken ze de volgende code
code:
1
Stream _previewStream = this.GetType().GetManifestResourceStream("$namespace_van_prog.Microsoft.WindowsAPICodePack.Shell.dll");

om de resources te laden.
VS2010 geeft echter de fout "Keyword 'this' is not available in the current context".
Wat zie ik over het hoofd waardoor ik op deze manier "this" kan gebruiken terwijl het bij iedereen lijkt te werken?
Eerst een assembly maken werkt ook niet, dan wordt de assembly niet herkend ("The name '_assem' does not exist in the current context."). Zelfs de code die op MSDN staat werkt niet bij mij. 8)7

Please leave a message after the beep.
*beeeeep*


Acties:
  • 0 Henk 'm!

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 16-09 17:37
Kan het misschien zijn dat je het uit een static method aan probeert te roepen? Dan heeft hij geen verwijzing naar zichzelf (this)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DoDo schreef op donderdag 10 maart 2011 @ 22:52:
Kan het misschien zijn dat je het uit een static method aan probeert te roepen? Dan heeft hij geen verwijzing naar zichzelf (this)
Dat weet ik wel 99.99% zeker inderdaad ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MewBie
  • Registratie: April 2002
  • Laatst online: 23:48
De code verhuizen naar Form1_Load heeft geholpen, nu uitzoeken hoe ik de ShellFile functie weer kan aanroepen. :P

Bedankt voor het snelle antwoord. Zoals ik al zei, ik zag iets simpels over het hoofd.

Please leave a message after the beep.
*beeeeep*


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:32

gorgi_19

Kruimeltjes zijn weer op :9

MewBie schreef op donderdag 10 maart 2011 @ 23:21:
De code verhuizen naar Form1_Load heeft geholpen, nu uitzoeken hoe ik de ShellFile functie weer kan aanroepen. :P
Iets als http://bytes.com/topic/c-...ad-assembly-invoke-method ? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Waarom gebruik je niet ILMerge om de assemblies samen te voegen? Dan hoef je niets aan je applicatie te wijzigen.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
MewBie schreef op donderdag 10 maart 2011 @ 23:21:
De code verhuizen naar Form1_Load heeft geholpen, nu uitzoeken hoe ik de ShellFile functie weer kan aanroepen. :P

Bedankt voor het snelle antwoord. Zoals ik al zei, ik zag iets simpels over het hoofd.
Je kan natuurlijk ook je code iets veranderen.

C#:
1
2
3
typeof(MyType).GetManifestResourceStream(...);
//ipv
this.GetType().GetManifestResourceStream(...);

Of als het idd een managed dll is gewoon ILMerge gebruiken zoals AtleX hierboven aangeeft. Of als je het toch graag zelf wil doen, de dll inladen met Assembly.Load(Byte[]) of een van de andere overloads

[ Voor 21% gewijzigd door Woy op 11-03-2011 09:44 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • OKA
  • Registratie: Juni 2005
  • Laatst online: 01:35

OKA

AtleX schreef op vrijdag 11 maart 2011 @ 09:36:
Waarom gebruik je niet ILMerge om de assemblies samen te voegen? Dan hoef je niets aan je applicatie te wijzigen.
Of Netz.
Netz werkt m.i. stukken beter, doet ook compressie en werkt ook goed met sommige betaalde dll-componenten.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Woy schreef op vrijdag 11 maart 2011 @ 09:41:
[...]

Je kan natuurlijk ook je code iets veranderen.

C#:
1
2
3
typeof(MyType).GetManifestResourceStream(...);
//ipv
this.GetType().GetManifestResourceStream(...);
Daar zit alleen nog wel een addertje onder het gras, want GetType() resolved het type naar een System.Type instantie dynamisch gedurende run time, terwijl de typeof operator statisch gedurende compile time zijn werk al doet.

Een voorbeeld waar dit fout kan gaan, is wanneer je types aanspreekt die je gedefinieert hebt in een ASP.NET project. Beide methodes kunnen dan een type terug geven wat functioneel hetzelfde is, maar zich wèl in andere assemblies bevindt. E.e.a. heeft te maken met hoe ASP.NET code compileert en bijhoudt in temporary files.

Dat is behoorlijk irritant als je met zaken als manifest resource streams bezig gaat. Goed mee opletten dus. :)

[ Voor 3% gewijzigd door R4gnax op 12-03-2011 02:55 ]

Pagina: 1