14. marts 2005 - 10:31Der er
6 kommentarer og 1 løsning
Dllimport af dato fra C dll.
Jeg har et problem mht. import af dato og tid fra en dll lavet i C. Datostrukturen i C ser således ud:
struct TMDT // time and date {uchar tsc; // second (0->59) uchar tmn; // minute (0->59) uchar thr; // hour (0->23) uchar ddy; // day (0->30) uchar dmn; // month (0->11) uchar dyr; // year offset from 2000 (0->99) };
Jeg har prøvet at hente værdierne ud vha. en DateTime variabel men den går ikke. Jeg har søgt på nettet og er kommet frem til at det muligvis kunne lade sig gøre vha. noget "Marshalling", men da jeg er ny på dllimport-området har jeg ikke helt fundet ud af hvordan det virker endnu. På forhånd tak!
Jeg sad engang og fuskede med at loade data fra en binærfil hvori der lå structs ind i objekter, og min fremgangsmåde var som følger:
using System.IO; using System.Runtime.InteropServices;
private static DateTime LoadDateFromStream(FileStream str) { try { byte[] byteArr = new byte[str.Length]; str.Read(byteArr,0,(int)str.Length); IntPtr p = Marshal.AllocHGlobal((int)str.Length); DateTime dt = new DateTime();
Marshal.Copy(byteArr,0/*startindex af structen i streamen*/,p,Marshal.SizeOf(dt)); dt = (DateTime)Marshal.PtrToStructure(p,typeof(DateTime)); Marshal.FreeHGlobal(p);
Du skal nok lave en struct magen til C structen i C# som du kan lægge dataene over i, i stedet for det DateTime fusk jeg laver ovenover, og så bagefter sætte et DateTime objekt med værdierne fra structen.
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.