19. juni 2003 - 11:44Der er
8 kommentarer og 1 løsning
Legacy? import af C++ dll i C#
Hejsa.
Jeg har en håndfuld C++ dll'er som jeg vil benytte mig af i C#. Jeg har ikke selv skrevet Dll'erne men jeg har adgang til source koden. C++ er ikke liiiiige det sprog som jeg er bedst til. Det tager lang tid for mig at læse det igennem. Anyway. Hvordan benytter jeg mig af disse Dll'er? hvordan importerer jeg dem, instantierer dem og hvordan kalder jeg metoder i dem?
Jeg har søgt rundt omkring på nettet og kan se jeg måske skal have gang i noget Unsafe code eller bruge P/Invoke som jeg ikke kender noget til.
Er der nogen der kan forklare logikken omkring det og fremholde nogle links med eksempler der virker?
Ude på linket er der flg eksempel. Er det ikke det du søger? [C#] [DllImport("KERNEL32.DLL", EntryPoint="MoveFileW", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)] public static extern bool MoveFile(String src, String dst);
jeg tror jeg har tydet mig frem til hvordan det skal laves, men jeg får en ryntime error hvor den siger at den ikke kan finde entrypoint for den funktion jeg vil kalde. Nogen der kan hjælpe?
her er fejlen: --------------- System.EntryPointNotFoundException: Unable to find an entry point named LukOp in DLL PosEpson_com.dll.\r\n at DLLImportTest.Form1.LukOp(Byte b)\r\n at DLLImportTest.Form1.button1_Click(Object sender, EventArgs e) in form1.cs:line 95 ---------------
og her er lidt af min kode:
------------------- using System.Runtime.InteropServices;
public class Form1 : System.Windows.Forms.Form { [DllImport("PosEpson_com.dll", EntryPoint="LukOp", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)] public static extern string LukOp(byte b);
Det ser ud til at dit DLL indeholder et object PosDrv, som så indeholder funktionen LukOp(). Så du skal først instansiere et PosDrv-object og så kalde metoden på dette objekt..
Jeg fik det aldrig til at virke og eftersom der ikke var nogen der kunne hjælpe mig med spørgsmålet lukker jeg det nu. Jeg har ordnet det på anden vis.
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.