13. august 2007 - 16:43Der er
9 kommentarer og 1 løsning
AccessViolationException i kald til native dll
Hejsa,
Jeg sidder med et problem jeg bare ikke kan kringle. Vilkårligt får jeg nemlig smidt en acces-violation i hovedet når jeg prøver at tilgå en native dll.
[DllImport("TallyKeyMifareReader.dll", EntryPoint = "_GetAboutString")] public static extern string _GetAboutString();
Og som sagt får jeg exception på vilkårlige tidspunkter - jeg har ikke fundet en sikker måde at genskabe det på, men hvis jeg prøver nok gange dukker den op.
Det underlige er, at metodekaldet til debug-print bliver udskrevet i debug-view, og derefter får jeg smidt den omtalte exception i hovedet.
Hvis man forestiller sig, at det er caller som skal rydde din string op (jeg kan ikke lige huske reglerne) så vil du få et problem, idet den managede kode vil forsøge at free'e din statiske streng - og dermed skabe vilkårlige fejl. Jeg vil tro, du skal lave en ny streng ud fra den statiske streng, og returnere denne kopi i stedet.
Nej, det gør jeg nu ikke. Det skal dog siges, at det ikke er mig der compiler C koden. Det bliver compilet med Borlands compiler.
Jeg har selv forsøgt med samme konfiguration:
XP 32 bit .NET 2.0 VC++ 8.00
Og der kan jeg ikke fremprovokere fejlen. Men gør jeg det op mod den assembly jeg får fra min kollega, får jeg med jævne mellemrum den omtalte exception - selvom C/CPP-koden er den samme.
>> "selvom C/CPP-koden er den samme." Den kode jeg har posted her er den samme - det er selvfølgelig en del af et større projekt, og derfor kan jeg heller ikke bare konvertere hele projektet og compile selv.
Umiddelbart ser det ud til at vi har fået det til at virke. Vi kører nu med wide-strings i stedet for, og hvis jeg fortæller mit eksterne kald, at den skal forvente en widestring ser det ud til at virke. Vi har i hvert fald ikke fået fejlen siden.
Hmm... Gad vide hvorfor der kom et "svar" fra mig, da jeg accepterede svaret...
Synes godt om
Ny brugerNybegynder
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.