Avatar billede macane Nybegynder
22. december 2004 - 21:32 Der er 4 kommentarer

Variable størrelse structs og pointers.

Jeg er ved at programmere CAPI (Common ISDN API) og stædig som jeg er vil jeg have det til at lykkedes i C# :)

Sprøgmålet er som følger:
Jeg nogle structs et eksemplet kunne være

struct mainstruct {
    public int length_of_whole_struct_including_substructs
    public byte somevar2
    public struct substruct1
    public struct substruct2
}

substructs er variable af størrelse da de indeholder for eksempel et indgående eller udgående nummer og er bygget op på denne vis:

struct substruct1 {
    byte1 length_of_struct;
    byte2 somedata;
    byte3 until length_of_struct phonenumber;
}

Hvis der nu var for at sende en række ascii chars indenfor managed code ville en string jo være ideel men!,
for at returnerer dataen til capi-protokollen skal jeg bruge en pointer til mainstruct hvilket kun lader sig gører indenfor

mainstruct structVar;
unsafe {
mainstruct *pointer = &structVar;
    *pointer->somvar2 = 123;
    etc...
}

problemet er i bund og grund hvordan jeg laver en struct der kan ligge sig byte for byte i rækkefølge i hukommelsen. tage længden på den og addressen.
Jeg kan ikke streame dem ned i CAPI'en da den skal bruge hele blokken med det samme.
Er der en måde at lave en form for en byte array, der kunne stoppes ind i struct bagefter??

Jeg håber en eller andet superbrain kan være mig behjælpelig :)

Med venlig hilsen
Christian
Avatar billede wisen Nybegynder
02. januar 2005 - 13:42 #1
Prøv at kigge på klassen Marshal : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemRuntimeInteropServicesMarshalClassTopic.asp

... den har bl.a. metoder som StructureToPtr, PtrTostructure og SizeOf
Avatar billede wisen Nybegynder
02. januar 2005 - 13:52 #2
Avatar billede wisen Nybegynder
20. januar 2005 - 13:31 #3
.. er du kommet videre ?
Avatar billede macane Nybegynder
21. januar 2005 - 18:55 #4
Nej er ikke kommet videre, jeg arbejder på det når tiden tillader det og de her dage er tiden ikke til det pga arbejde.
Jeg har kigget de ovestående links og blev ikke umiddelbart klogere på hvordan jeg kan lave en C-style.

while (blah blah) {
*pointer += 1;
pointer = somebyte;
}

C# er ikke gode venner med pointers :)
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