HDSoftware Skrevet 25. februar 2011 Del Skrevet 25. februar 2011 Hei alle eksperter Jeg har en C++ DLL som er kompillert i moxed mode slik at jeg kan kalle .net komponenter. På min maskin så fungerer dette helt ypperlig og glimrende. Når jeg kjører dette på en windows 2008 R2 server så går dette også helt greit. en hvis jeg tar programmet til Windows XP eller Windows Server 2003 så feiiler det med meldingen om initiaalisering feiler og kode 0xc0000005. Jeg har googlet dette opp og ned i mente og har vel således funnet at dette er en Access Violation error. Jeg har også funnet en artikkel på MSDN som omhandler noe av det samme, men finner liksom ingen artikkel som gir meg noe fornuftig svar.. Jeg gjetter jo på at det er en eller annen DLL som kansje ikke stemmer i versjon eller noe slikt. Trenger sårt litt hjelp her og dere c++ kodere kan sikkert dette på fingerspissen For ordensskyld, dette c++ laget mitt er et standard c++ prosjekt der jeg har slått på støtte for mixed mode. tror det heter /CLR (sitter på toget i skrivende stund så jeg får ikke sjekket) Denne C++ DLL'en kaller jeg opp fra et program skrevet i Clarion for Windows, som er å se på som et hvilket som helst annet win32 program, med full støtte for API. C++ DLLen er kompillert inn med en eksporert prosedyre slik at jeg får tak i den fra Clarion. Denne prosedyren returnerer et interface fra C++ som jeg benytter i Clarion. Som sagt så går dette kjempefint altså så et er ikke der problemet ligger, men i det jeg kjører dette fra terminal server 2003. Setter umåtelig stor pris på alle bidrag her... Lenke til kommentar
HDSoftware Skrevet 25. februar 2011 Forfatter Del Skrevet 25. februar 2011 Bare så det er sagt: Jeg hr selvsagt installert VC100 runtime... Lenke til kommentar
GeirGrusom Skrevet 25. februar 2011 Del Skrevet 25. februar 2011 .NET installert også? Lenke til kommentar
HDSoftware Skrevet 27. februar 2011 Forfatter Del Skrevet 27. februar 2011 hehe, skulle tro det. Så at kunn fw4 Client var der så jeg tenkte at en installasjon av FW4 full ville hjelpe, men nope... Får fortsatt feilmeldingen.... Lenke til kommentar
GeirGrusom Skrevet 28. februar 2011 Del Skrevet 28. februar 2011 Jeg ville tro dette har noe med biblioteker å gjøre. Hvor stopper Visual Studio under debugging da? Lenke til kommentar
HDSoftware Skrevet 28. februar 2011 Forfatter Del Skrevet 28. februar 2011 hehe, tror kansje du skal lese innledende innlegg en gang til ;-) Lenke til kommentar
HDSoftware Skrevet 28. februar 2011 Forfatter Del Skrevet 28. februar 2011 (endret) Bare en tilleggs opplysning: Hvis jeg stripper vekk C++ og Clarion biten i prosjektet og lager en egen C# EXE som bruker klassene mine så fungerer det helt knirkefritt altså... Også på terminal serveren... Det må jo være et bevis på at Framework er intallert. Endret 28. februar 2011 av HDSoftware Lenke til kommentar
GeirGrusom Skrevet 28. februar 2011 Del Skrevet 28. februar 2011 (endret) Én ting som slår meg, er at Windows 2008 R2 er kun å få i 64-bit, og 64-bit er normen i Windows 7, men Windows XP og 2003 er det ingen selvfølge er 64-bit. Jeg anbefaler at du legger inn virtuelle testmaskiner (VirtualBox er å anbefale) og tester mer grundig. Legg også inn debugger på testsystemene dine, da er det mye enklere å se hva som kræsjer. Endret 28. februar 2011 av GeirGrusom Lenke til kommentar
HDSoftware Skrevet 28. februar 2011 Forfatter Del Skrevet 28. februar 2011 Har vært inne på tanken. Jeg har derfor "tvunget" VS til å produsere Win32 kode i alle ledd. Hjalp nada desverre enese jeg ikke har testet er å intallere VS2010 på terminal serveren og rekompillere der... Kansje en ide? Lenke til kommentar
GeirGrusom Skrevet 28. februar 2011 Del Skrevet 28. februar 2011 Visual Studio 2010 Remote Debugger The Remote Debugger Installation is intended for computers without Visual Studio in order to debug applications executing on these computers. A full installation of Visual Studio 2010 with remote debugging support must be used to connect to these components. Kanskje noe å vurdere? Lenke til kommentar
HDSoftware Skrevet 28. februar 2011 Forfatter Del Skrevet 28. februar 2011 Tror neppe det virker. Som nevnt så fungerer dette aldeles glimrende med et rent .NET program på disse maskinene. Det er når jeg kaller MixedMode C++ DLL fra Clarion at dette feiler. Tror neppe jeg får kjørt den Debuggeren du snakker om sammen med et Clarion program. Måtte eventuellt ha laget en EXE i C da som drar opp denne mixed mode DLL'en, men da må jkeg studere en hel drøss. Aner ikke engang hvor jeg skal begynne på noe sånt... Lenke til kommentar
GeirGrusom Skrevet 28. februar 2011 Del Skrevet 28. februar 2011 Hvorfor er du så sikker på at det er Clarion delen som feiler da? Lenke til kommentar
HDSoftware Skrevet 28. februar 2011 Forfatter Del Skrevet 28. februar 2011 Det er ikek Clarion som feiler. Det er lastingen av DLL'ene. Og siden jeg ikke har noen starter i .NET eller i C++ så får jeg heller ikek debugget med Visual studio, får jeg vel? Lenke til kommentar
GeirGrusom Skrevet 28. februar 2011 Del Skrevet 28. februar 2011 Og Clarion mangler fullstendig debuggingsmuligheter? Lenke til kommentar
HDSoftware Skrevet 1. mars 2011 Forfatter Del Skrevet 1. mars 2011 nei, men som jeg har sagt tidligere, det er ikke feil i koden min. Feilen er lastingen av programmet. Det må være en eller anne mangel. Jeg har nå droppet InterOP tankegangen og kompillert en C# exe fil som tar imot parametere. Håpløst dårlig workaround egentlig, men det funker til akkurat dette formålet. Men jeg MÅ finne en løsning fordi heg har flere oppgaver som skal løses der utveksling av data må gå begge veier. Har gjort det tidligere ved å ha en parameter tabell på SQL serveren, men URK URK URK!!! Lenke til kommentar
GeirGrusom Skrevet 1. mars 2011 Del Skrevet 1. mars 2011 Access Violation er en typisk "peker er satt til null feil" En ting jeg glemte i forbifarten er at du kan debugge DLL-er i Visual Studio som ikke nødvendigvis blir startet av et .NET program. Sjekk Debugging siden i konfigurasjonen. Det er ikke produktivt å skylde på tredjeparts-API-er eller det underliggende systemet. 999 av 1000 ganger er det utvikleren selv som gjør det feil, men det er alltid fristende å skylde på .NET eller Microsoft, men det fungerer som regel i den enden. Jeg har vært borti én feil i .NET gjennom tida jeg har jobbet med det (var en feil i ListBox kontrollen), og det løste jeg ved å gjøre det på en annen, mer egnet måte. Lenke til kommentar
HDSoftware Skrevet 1. mars 2011 Forfatter Del Skrevet 1. mars 2011 Jeg skylder ikke på noe API fordi det ikke er feil på noe API. Jeg skylder heller ikke på .NET for dette er C++, selv om det er managed altså. Jeg VET at .NET fungerer på terminal serveren fordi jeg, etter å ta vekk C++ DLL'en, har fått dette til å virke helt fabelaktig, men det er en kjip workaround. Jeg VET også at dette ikke har med null pekere å gjøre fordi, som jeg har nevnt tidligere, det ikke er kode feil i programmet som forårsaker feilen. Når en EXE fil lastes inn i minnet så utfører OS en masse oppgaver som f.eks. det å sette av minne og laste andre DLL'er i minnet. Når f.eks. en DLL ikke eksisterer så vil det normalt komme en feil melding fra OS'et om den manglende DLL. I dette tilfellet så mangler det ingen DLL fordi dette kjører 100% på alle våre PC'er. Når vi kopierer hele produksjonsmappa over på en Windows 2003 server så feiler det. La meg si det slik: Hvis jeg i et test program laget i clarion legger inn som absolutt og første og eneste kodelinje: Message('Her er jeg') Så feiler programmet før message vises. Det må da være et bevis godt nok på at det ikke er bøggs i koden min... Eventuellt så kunne jeg trodd det om det var noe problemer med noen statiske klasser, men da ville jo feilen ha dukket opp på alle maskiner. Lenke til kommentar
GeirGrusom Skrevet 2. mars 2011 Del Skrevet 2. mars 2011 Access Violation er at du prøver og lese eller skrive til en ugyldig peker (null peker, eller peker til et objekt som er frigjort), eller gir ugyldige verdier til biblioteksfunksjoner. Hvis det er din managed C++/CLI kode som feiler, så burde du bruke Visual Studio for å se hvor det er. Forøvrig kompilerer C++/CLI til ren .NET CLR kode. Du kan debugge DLL-en ved å få Visual Studio til å starte klientprogrammet gjennom Properties til prosjektet, "Configuration Properties->Debugging" Du kan også velge remote debugging der dersom du ikke vil installere hele Visual studio på maskinen. Lenke til kommentar
HDSoftware Skrevet 3. mars 2011 Forfatter Del Skrevet 3. mars 2011 hehe, igjen, det er altså ikek noe kode som feiler. Det er nemlig ikke noe kode som kjører når den meldingen dukker opp. Jeg tror jeg har sagt dette sikkert 3 ganger nå ;-) Jeg tror jeg gir opp denne tråden. Blir for vanskelig å kommunisere problemet. Lever med EXE løsningen inntill videre så får helelr kunder som bruker Win7 og WIn2008 få den ordentlige løsningen som virker og XP og win2k3 får bruke workaround modellen så lenge.. Lenke til kommentar
GeirGrusom Skrevet 3. mars 2011 Del Skrevet 3. mars 2011 (endret) Her er et typisk tilfelle av Access Violation, index out of bounds: int* ptr = new int[100]; ptr[99] = 500; // OK ptr[100] = 1000; // Access violation, det er bare 100 elementer i arrayet delete[] ptr; int val = ptr[99]; // Access violation, arrayet er slettet Kanskje det hjelper litt? Eventuelt kan du bruke Dependency Walker for å sjekke at alle DLL-er er i samme versjoner, uten at jeg har noen stor tro på at det er dette som er problemet, men det er ikke umulig. Endret 3. mars 2011 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå