07. oktober 2010 - 13:08
Der er
13 kommentarer og 1 løsning
Marshal.FreeCoTaskMem
Hej Jeg har lavet en lille program som printer ud til BONPrinter men hver gang jeg kalder: Marshal.FreeCoTaskMem(Buff); Så crasher programmet i Windows 7 og kun 64bit?? Den virker fint i x32 versioner af vista, xp og windows 7 Nogen kan hjælpe :)
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
07. oktober 2010 - 13:24
#1
Der er forskel på programmer udviklet til 32 bit og til 64 bit. Under din Configuration manager i Visual Studio kan du sætte om programmet skal bygget til 32 eller 64 bit.
07. oktober 2010 - 13:57
#3
Er der en alternativ til følgende linie: Marshal.FreeCoTaskMem(Buff); Så den virker i både 32bit og 64bit??
07. oktober 2010 - 14:14
#4
07. oktober 2010 - 14:44
#5
Nej cdull, det er ikke nok :-) 64bit kan ikke lige følgende linie: Marshal.FreeCoTaskMem(Buff);
08. oktober 2010 - 02:36
#6
Marshal.FreeCoTaskMem må betyde at der er noget COM involveret. COM er unmanaged kode og derfor enten 32 eller 64 bit. Managed .NET kode derimod kan køre på både 32 og 64 bit (hvis man ikke ændrer default platform fra anycpu). Men vi skal nok vide lidt mere om hvad for noget COM du kalder og hvordan.
08. oktober 2010 - 09:25
#7
Arne_v: Det har du ret i :-) Der er noget COM involveret og jeg har ikke ændret i "anycpu" option. Jeg tror jeg fandt problemet men kan alligevel duobletjekkes :-) Gemmes der noget i memory ved at kalde: Marshal.UnsafeAddrOfPinnedArrayElement(); Jeg tror problemet var at jeg kalde følgende: 1: Marshal.UnsafeAddrOfPinnedArrayElement(buff, 0); 2: Marshal.FreeCoTaskMem(buff); og hvis kald 1 ikke gemme noget, fejler kald 2? Men det er interessant at xp, vista og win7 i 32bit klager ikke over det, men det gør win7 64bit?
08. oktober 2010 - 16:20
#8
Det ser forkert ud. Docs siger: You can use FreeCoTaskMem to free any memory allocated by AllocCoTaskMem, ReAllocCoTaskMem, or any equivalent unmanaged method.
09. oktober 2010 - 00:48
#9
Så må det være derfor den fejler :-) Men hvorfor tror du den fejler kun i 64bit og ikke 32bit?
09. oktober 2010 - 01:47
#10
Det kan være tilfældigt. Husk at C# er et sprog hvor ting normalt enten virker eller altid giver en fejl, men C/C++ er sprog hvor ting enten virker eller resulterer i uforudsigelige fejl. På 32 bit overskriver den sikkert et stykke memory som ikke skal bruges, mens den på 64 bit crasher.
20. november 2010 - 01:13
#11
Kommet videre?
20. november 2010 - 01:37
#12
tak :-)
20. november 2010 - 01:38
#13
arne_v du må gerne svar :-)
20. november 2010 - 01:49
#14
svar
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.