Avatar billede borrisholt Novice
03. maj 2007 - 19:16 Der er 8 kommentarer og
1 løsning

Load af 32 Bits DLL

Hej Eksperter

Jeg skal loade en 32 Bits DLL i C#. Og jeg er helt på bar bund. Jeg har set er par artikler på Codeproject men de giver ikke rigtig mening.

Jeg kan godt kalde LoadLibrary, og jeg kan godt kalde GetProcAddress, meeeeen hvordan bruger jeg den funktions pointer til noget ?

i Delphi ville jeg lave mig en type

type
  TFlexiDllVersion = function : integer;

lave en variabel af den type :
var
  CallFlexiGetDllVersion: TFlexiDllVersion;

for så tilsidst at intialisere min variabel:

CallFlexiGetDllVersion := GetProcAddress(LibHandle, 'FlexiGetDllVersion');

Hvor LibHandle er et handle til min DLL opnået gennem LoadLibrary.

Men hvordan gør man i c#

Jens B
Avatar billede thesurfer Nybegynder
03. maj 2007 - 19:59 #1
Jeg stod med samme problem, for noget tid siden..

Her fik jeg at vide, at "C#" (som jo kører i .Net platformen) ikke kan dele DLL filer med "Delhi".

Dog kan "C#" bruges sammen med "Delphi.Net".

Jeg venter spændt på et svar, der kan modsige det jeg engang fik at vide.. :-)
Avatar billede borrisholt Novice
03. maj 2007 - 20:15 #2
jammen  jeg vil da gerne sige dig i mod. Prøv ar kigge på den her artikel fr TheCodeProject : http://www.codeproject.com/csharp/dyninvok.asp

Måske det giver mening for dig.
Avatar billede borrisholt Novice
03. maj 2007 - 20:27 #3
Men hvis du kan oversætte koden til c#'sk så vil jeg være MEGET glad
Avatar billede thesurfer Nybegynder
03. maj 2007 - 20:40 #4
Hvis jeg ikke tager fejl, har jeg allerede været forbi den side, i min søgen efter dynamisk inkludering af DLL filer under runtime.. :-)

Her er en bid fra siden:

"One solution would be to write a small C++ DLL which merely forwards the call on. In other words, the C++ DLL is acting as a proxy for our intended function. The downside is that a new C++ DLL would have to be created every time a different DLL function needs to be called. The proxy function needs the exact number of parameters that the real function takes. Every C# programmer needs to know C++ to be able to do this."

Som jeg forstår det, er det en C++ DLL fil, der er "mellemmand".. dvs, C# skal tale med C++ DLL'en, for at kunne få adgang til Win32 DLL'en..


Hvilket (mere eller mindre) bekræfter 03/05-2007 19:59:57.. :-)
Avatar billede hmortensen Nybegynder
03. maj 2007 - 23:28 #5
Kan du ikke blot bruge DllImport attributten?
Avatar billede arne_v Ekspert
04. maj 2007 - 04:51 #6
hmortensen>

pointen er nok at de vil have den dynamisk
Avatar billede arne_v Ekspert
04. maj 2007 - 04:52 #7
den codeproject artikel bruger en noget suspekt low level måde

den her artikel:

http://blogs.msdn.com/jonathanswift/archive/2006/10/03/Dynamically-calling-an-unmanaged-dll-from-.NET-_2800_C_23002900_.aspx

bruger en delegate og ligner Delphi's måde
Avatar billede borrisholt Novice
20. maj 2007 - 12:31 #8
arne_v>> Tak for dit hint, jeg valgte at bruge fragmenter fra det du henviste til. Smid et svar og jeg giver dig points.
Avatar billede arne_v Ekspert
20. maj 2007 - 15:05 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester