AccessViolationException , Zugriff auf geschützen Speicher

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Nano.v1.

    AccessViolationException , Zugriff auf geschützen Speicher

    Ich habe folgendes Problem beim Ansprechen einer DLL, Aufgabe ist es aus einem probritären Datenbanksystem einen Wert auszulesen, beim Zugriff auf das Element wird allerdings ein AVE-Error ausgegeben:
    pastebin.com/mw6TpiHA

    Die Header-File lautet wie folgt:
    pastebin.com/1zvgJ80k

    Mein Quellcode:
    pastebin.com/AFLAUt2y

    Was mache ich falsch?

    Ich hoffe alle relevanten Informationen angehängt zu haben, wenn nicht bitte kurz bescheid geben.

    EDIT: Formatierung des Beitrags editiert, hoffentlich passt es jetzt
    EDIT2: Kann mir jemand sagen warum die Formatierung so schlecht ist in den VB-Tags? Mach ich da was falsch?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nano.v1“ ()

    Bitte Formatiere erst mal den Quellcode so ist das echt eine Zumutung ...
    PS
    ich konnte einfach Copy und paste aus meinem Visual Basic Project machen und da gab es bis jetzt noch nie Probleme :)
    woher fügst du es den ein ?
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Gerne, wenn ich wüßte wie ich ihn richtig formatiere, siehe EDIT2, Post#1

    EDIT1:

    Genauso, ich kopiere die Daten direkt aus der VS in die VB-Tags, beim Einfügen sind auch alle Zeilenumbrüche da, nach dem Absenden aber nicht mehr

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nano.v1“ ()

    Für welches Programm? Meine Wrapper-DLL, die Original-DLL oder mein Steuerprogramm?

    Ansich bin ich als Admin-User angemeldet.

    Explizite Adminrechte sind für kein Programm vergeben worden

    EDIT1:

    Anzumerken ist das das Connecten mit der Datenbank sowie das Schreiben eines Wertes Typ DMS_WriteBITEx funktioniert, nur das lesen nicht
    hm versuche erst mal dein Steuerprogramm explizit Admin rechte zu geben, da so wies aussieht er ihn einen Geschützen Bereich schreiben will :)
    ansonsten wäre es noch gut wen du uns noch den Inhalt von Button1_Click mitteilen würdest :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    bei welcher Zeile kommt es vor :) (da du uns ja nur den Ausschnitt gegeben hast :) )
    bei :

    VB.NET-Quellcode

    1. ret = pmospipe_wrapper.DMS.Write.DMS_ReadBITEx(dms, "System:togglebit", readByte)

    ?
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()

    In Zeile 9, Lesezugriff auf BIT.

    VB.NET-Quellcode

    1. ret = pmospipe_wrapper.DMS.Read.DMS_ReadBITEx(dms, "System:togglebit", readByte)


    Alle anderen Befehle werden sauber und fehlerfrei abgearbeitet. Verbinden, Schreiben, Verbindung beenden funktioniert tadellos.

    Wieso nur Ausschnitt? Was fehlen den für Infos, poste sie gerne wenn ich weiß was fehlt.
    wir bräuchten dann noch den Code Ausschnitt von DMS_ReadBITEx (pmospipe.h).
    dann wüsten wir auch was in DMS drin stehet :) (sorry aber wir müssen so wies aussieht der Code durch arbeiten :) )
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Du kannst nicht einfach einen String übergeben. TChar* musst du durch das MarshalAs Attribut marshalen. Adminrechte haben hiermit nicht im entferntesten etwas zu tun.
    Als erstes solltest du keine absoluten Pfade angeben. Das heißt kein C:\PromosNT17\bin\PMOSPIPE.dll. Pack die Dll irgendwo hin wo ein einfaches PMOSPIPE.dll reicht. Entweder in dein Programmverzeichnis, in System32,...
    Als zweites bitte poste nicht extern den Code(auch wenn das manche sagen ist das sehr umständlich). Und poste immer nur Codefetzen, welche wirklich dein Problem betreffen. In dem Fall die Deklaration in der Headerdatei, und die Definition von tBIT und deinen VB Code.
    So nun wieder zum Problem. Du kannst folgendes versuchen. Die folgenden Vorschläge betreffen immer den zweiten Parameter:
    • Verwende StringBuilder anstatt von string
    • Verwende das MarshalAs-Attribut: LPStr(vorausgesetzt es ist ANSI eingestellt)

    Wie auch immer beim DllImport-Attribut solltest du noch folgendes angeben: CharSet=CharSet.Ansi und CallingConvention=CallingConvention.StdCall.


    EDIT: Was du natürlich auch noch tun kannst ist folgendes:
    Du kannst beim 2. Parameter auch den Typ in IntPtr verändern. Anschließend kannst du mit PtrToStringAnsi und StringToHGlobalAnsi arbeiten.

    EDIT2: Da fällt mir noch was auf: Der letze Parameter ist auch falsch. a) weiß ich nicht was tBIT ist -> bitte Definition angeben und b) ist das tBit& was so viel heißt, dass du davon eine Referenz übergibst. Du solltest somit beim 3. Parameter das ByVal in ein ByRef ändern.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    Definition von tBIT in pmospipe.h:

    Quellcode

    1. tBIT _stdcall DMS_RdBITEx(int idx, TCHAR *name);



    Ok, jetzt bin ich gerade leicht überfordert, versuchen wir es StepByStep:


    pmospipe.dll ist nunmehr im Programmverzeichniss.
    <dllimport wurde um die definierten parameter erweitert, kein erfolg

    Irgendwie bin ich gerade überfordert (grins), hoffe das ich alles richtig verstehe