[VB.NET] importing non-.net dll's

Pagina: 1
Acties:

  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Ik ben aan het programmeren in visual basic .NET en heb nu een hele bult functies en constanten uit een .dll bestand. Deze functies zijn volledig nageslagen in de msdn library die bij de visual studio zit. Om te worden gebruikt wordt er verwezen naar een .h bestand. Maar het probleem is dat je dit niet kan includen in een visual basic .net project. Kan dit op 1 of andere manier toch geimporteerd worden door dit project zodat ik die functies makkelijk kan gebruiken?

De dll importeren als reference werkt niet, dan geeft deze een error.
Op google/got/msdn kan ik het ook niet vinden.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Zijn het Windows API functies ?

Je kan eens kijken naar de DllImport attribute.

https://fgheysels.github.io/


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Zoek eens op Interop Marshalling, unmanaged code en de System.Reflection namespace in MSDN.
Daar staat zeker iets over het laden van niet .NET dll's.

Edit
linkje naar Interop op MSDN

[ Voor 40% gewijzigd door MTWZZ op 19-12-2004 17:14 . Reden: linkje gevonden ]

Nu met Land Rover Series 3 en Defender 90


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

.h files includen zal weinig nut hebben, aangezien deze alleen typedeclaraties en prototypes behoren te bevatten, geen daadwerkelijke logica. Welke error krijg je bij het importeren van die dll als reference?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Al eens iets geprobeerd met tlbimp ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Verwijderd schreef op zondag 19 december 2004 @ 17:23:
Al eens iets geprobeerd met tlbimp ?
Daar heb ik ook aan gedacht. Daarmee ga je een com interface gaan 'bouwen', en dan zou je die dll normaal moeten kunnen importern.

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
-NMe- schreef op zondag 19 december 2004 @ 17:10:
.h files includen zal weinig nut hebben, aangezien deze alleen typedeclaraties en prototypes behoren te bevatten, geen daadwerkelijke logica. Welke error krijg je bij het importeren van die dll als reference?
.h Files includen is juist wat ik nodig heb. Ze verwijzen precies hoe hij de functies uit de dll kan gebruiken en definieert de constanten. Het werkt wel maar om ze bij enkele functies om te schrijven naar vb.net code. Maar voor weet ik hoeveel functies en constanten is dat een asociaal grote klus.

Verwijderd

ja, maar als het goed is heeft die .h file ook nog ergens een implementatie in een dll. En die functies moet je gewoon importeren met dllimport. het msdn artikel verwijst je verder.

of je moet handmatig dat .h bestand parsen en door reflection heen halen, maar als ik jou was zou ik voor optie 1 gaan.

  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Met dllimport haal je elke functie apart op, in die .h files staan die declaraties al maar dan in c++ formaat waar vb.net dus niet om kan gaan.
Verwijderd schreef op zondag 19 december 2004 @ 17:23:
Al eens iets geprobeerd met tlbimp ?
Ja maar hij kan niks met die dll.

Het gaat dus om de dll avicap32.dll. In iedergeval ik geloof dat daar alle functies en constanten in zitten die ik moet hebben.

[ Voor 3% gewijzigd door Scorpion1984 op 19-12-2004 22:30 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Een header file is een file waarin de functie-definities staan. Het bevat 0 functionaliteit, en is niet gecompileerd.
Je kan dat dus niet 'zomaar' includen.

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Is het een groot probleem om de header file om te type naar VB.NET of gebeuren er dingen in de header file wat onmogelijk is in VB.NET?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Ben ik nu dom, of mis ik nu iets, maar wat heb je aan een header file zonder implementatie ?

https://fgheysels.github.io/


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
De meest gebruikte methode (AFAIK) is een DllImport te doen voor elke functie (die je nodig hebt) uit de DLL, en alle constanten zelf opnieuw te definiëren in je .NET project.

[ Voor 3% gewijzigd door riezebosch op 20-12-2004 10:30 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

whoami schreef op maandag 20 december 2004 @ 09:34:
Ben ik nu dom, of mis ik nu iets, maar wat heb je aan een header file zonder implementatie ?
Tja, dat vraag ik me ook al de hele tijd af... :?
Ik ga toch voor de DllImport of iets soortgelijks.

kernel32.dll doe je toch ook met een DllImport?

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
whoami schreef op maandag 20 december 2004 @ 08:43:
Een header file is een file waarin de functie-definities staan. Het bevat 0 functionaliteit, en is niet gecompileerd.
Je kan dat dus niet 'zomaar' includen.
Dat klopt, 0 functionaliteit, maar als je zo'n header file include weet het programma hoe deze de functies uit de dll moet aanroepen. Dat is het nut van de header file.
riezebosch schreef op maandag 20 december 2004 @ 10:12:
De meest gebruikte methode (AFAIK) is een DllImport te doen voor elke functie (die je nodig hebt) uit de DLL, en alle constanten zelf opnieuw te definiëren in je .NET project.
Ja dat klopt, maar dat is in dit geval erg veel werk. Daarbij gebruik ik vaker dll's op deze manier, en ik vroeg me gewoon af of dit gewoon niet makkelijker kan.

Ook zijn die functie-definitie niet altijd te vinden, en dus niet te gebruiken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Scorpion1984 schreef op maandag 20 december 2004 @ 17:41:
[...]


Dat klopt, 0 functionaliteit, maar als je zo'n header file include weet het programma hoe deze de functies uit de dll moet aanroepen. Dat is het nut van de header file.
Ik dacht het niet....

Een header file beschrijft de definitie van de functies.

Die .h file heeft helemaal niks te maken met hoe het programma kan weten hoe die methods kunnen gebruikt worden.
Een .h file : code
programma/dll: gecompileerd.

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Wat is volgens jouw dan het nut van een .h filetje. Helemaal niks?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Scorpion1984 schreef op maandag 20 december 2004 @ 19:52:
Wat is volgens jouw dan het nut van een .h filetje. Helemaal niks?
Een header file bevat signatures van methods of classes.
Die header file kan je gebruiken als je een applicatie ontwikkeld, maar dan heb je ook nog een file nodig met de implementatie van die functionaliteit die beschreven is in de .h file. Als je die niet hebt, ben je er niks mee.

Trouwens, een .h file is C of C++. Jij bent bezig in VB.NET.

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Ja DAT is dus het probleem, ik heb een non-.NET dll die ik wil gebruiken, dat heb ik regelmatig. En het is elke keer een teringwerk om deze functies en constanten allemaal op te halen ergens uit een documentatie. Ook is het soms onmogelijk om de declaraties te vinden.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Over de topictitel: zo ver ik weet bestaan er helemaal geen .NET DLL's :Y)
Keer iets gelezen dat dat niet de essentie van het framework is.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
riezebosch schreef op maandag 20 december 2004 @ 20:50:
Over de topictitel: zo ver ik weet bestaan er helemaal geen .NET DLL's :Y)
Keer iets gelezen dat dat niet de essentie van het framework is.
Wat ik bedoel is van die dll's die je als reference in een visual studio .net project kan toevoegen zodat jij zijn functies kan gerbuiken in je programma.

En in dit geval zijn het dus van die dll's die je niet kan toeveogen als reference.

[ Voor 11% gewijzigd door Scorpion1984 op 20-12-2004 21:04 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
riezebosch schreef op maandag 20 december 2004 @ 20:50:
Over de topictitel: zo ver ik weet bestaan er helemaal geen .NET DLL's :Y)
Keer iets gelezen dat dat niet de essentie van het framework is.
In .NET heb je assemblies. Een assembly is een 'executable unit'. Dat kan een exe, dll, ... zijn.

Het is echter zo dat je niet zomaar een 'unmanaged' dll kunt gebruiken in een .NET project.
Daarvoor heb je de tlbimp en tlbexp tools nodig, of moet je met de dllimport attribute aan de gang.

https://fgheysels.github.io/


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Dus het is gewoon een feit dat je unmanaged dlls gewoon compleet zelf de declararties moet verzinnen? En dat je die hooguit ergens vandaan kan halen?

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Scorpion1984 schreef op maandag 20 december 2004 @ 21:33:
Dus het is gewoon een feit dat je unmanaged dlls gewoon compleet zelf de declararties moet verzinnen? En dat je die hooguit ergens vandaan kan halen?
Euhm, ja volgens mij wel..
En verzinnen.. De MSDN-library bevat als het goed is de hele interface (de headerfile zeg maar).

Met een beetje fantasie kan je de headerfile omzetten in een class met dllimports :) .
Zo heb ik een kernel32 class met bijna al die functies.
Ik heb ook ergens een pagina gevonden waarin al die declaraties stonden (in VB6, VB.NET en C#)... maare, ik denk dat ik de link op m'n werk heb.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Ja meeste dll's zijn wel nageslagen, maar bepaalde niet, die niet bij windows zelf zitten.

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Goed, dit bedoelde ik dus:
http://custom.programming-in.net
(advapi32, avicap32.... allemaal hetzelfde 8)7 )

Ik denk dat je het beste één van de headers van een windows api gaat vergelijken met de imports in bovenstaande link. Dan kan je zelf een Shared Class bouwen met DllImports.

Meer kan ik er niet van maken.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
advcapi32 is dus ABSOLUUT iets heel anders. Maarja avicap32 heb ik ondertussen complete functies declaraties gevonden voor dllImport, maar voor sommige dlls is het dus helemaal nergens te vinden, je kan wel opvragen welke functies erin zitten (depend.exe) maar welke argumenten en constanten je hebt valt niet te vinden.

Verwijderd

Het lijkt me dat dit makkelijker moet kunnen... maar afgezien van m'n eerste reactie zo geen id hoe :/

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Scorpion1984 schreef op dinsdag 21 december 2004 @ 21:16:
advcapi32 is dus ABSOLUUT iets heel anders. Maarja avicap32 heb ik ondertussen complete functies declaraties gevonden voor dllImport, maar voor sommige dlls is het dus helemaal nergens te vinden, je kan wel opvragen welke functies erin zitten (depend.exe) maar welke argumenten en constanten je hebt valt niet te vinden.
vandaag de smiley, he ;) ..
Maar je hebt de header-file toch? Dan weet je welke functies en welke argumenten..

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd je hebt toch de .h file. Eventueel ga je zelf een parsertje schrijven waarmee je zelf VB.NET code genereert voor de DLL imports.

“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.”


  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
Ja voor deze DLL is het al opgelost, maar er zijn zat dll's waar je nergens .h file te vinden is of iets anders waardoor je em kan gebruiken.

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Als ik dus dit topic goed begrepen heb zijn er dus geen progjes die DLL's kunnen uitlezen (alle members)?

  • Scorpion1984
  • Registratie: Juni 2002
  • Laatst online: 17-05 11:19
eghie schreef op woensdag 22 december 2004 @ 15:34:
Als ik dus dit topic goed begrepen heb zijn er dus geen progjes die DLL's kunnen uitlezen (alle members)?
Idd, dat denk ik aangezien der antwoorden.

Je kan alleen de functie namen ophalen met depends, maar de argumenten ervan gaat niet, zover ik weet, en zover iedereen hier antwoord heeft gegeven.
Pagina: 1