[C#] Win32 DLLs gebruiken

Pagina: 1
Acties:

  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
Ik vroeg mij af of het mogelijk is om een standaard Win32 DLL te laden vanuit C#/.NET en daaruit functies aan te roepen. Dit kan natuurlijk met het DllImport-attribuut:

code:
1
[DllImport("kernel32.dll", EntryPoint="LoadLibrary")] public static extern int LoadLibrary(String strFileName);

Alleen dan moet je compiletime weten welke DLL je wilt gaan gebruiken :) Stel ik wil runtime een DLL kiezen, laden en daaruit een functie aanroepen? Ik heb het nog zo geprobeerd:

code:
1
public delegate int dllfunc(int a, int b, int c, int d, int e);

En dan via de DllImport-methode LoadLibrary en GetProcAddress aanroepen uit kernel32.dll, maar als ik dan uiteindelijk returnvalue van die laatste in een "dllfunc" stop en die aanroep krijg ik de melding:

code:
1
2
3
An unhandled exception of type 'System.ArgumentException' occurred in w32loader.exe

Additional information: Function pointer was not created by a Delegate.

Weet iemand nog een alternatief? Of zie ik iets heel erg over het hoofd?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik denk dat het het beste is dat je Managed C++ gebruikt hiervoor, althans: in C++ de DLL handel schrijft, en die in een assembly giet, dat kan met VC++ v7 (je kunt zowel managed als unmanaged code in 1 assembly prakken) en die assembly dan targetten vanuit C#.

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


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
Goed plan! Dan ga ik nu maar'es in managed/unmanaged C++ duiken :)

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Ik kwam laatst de volgende tip tegen, die niet netjes maar wel makkelijk is: in (managed) VB kan je heel eenvoudig dll's aanroepen omdat VB de typecasting voor z'n rekening neemt.

Vooral als je op zoek bent naar makkelijk: schrijf een dllwrapper in VB ;)


Journalism is printing what someone else does not want printed; everything else is public relations.