2009-08-07 21 views
1

Meine Windows-Anwendung mit Benutzersteuerung und eine DLL ist auf 4 Stück geladen. Einer der PCs erscheint, "Versuch, geschützten Speicher zu lesen/zu schreiben". Bitte geben Sie mich beraten.Versuch zu lesen/schreiben geschützten Speicher

Windows Form wird nur als Hintergrund verwendet. Die Benutzerkontrolle wird auf dieses Gewinnformular geladen und fügt eine DLL in die Referenz ein.

Antwort

1

Ich war in einer Anwendung genau die gleiche Nachricht bekommen, und es war sehr schwer es zu lösen. Ich habe nach dieser Nachricht gegoogelt und eine Reihe verschiedener Ursachen und Lösungen gefunden ... keiner von ihnen hat für mich funktioniert.

Nun, in meinem Fall, ich wurde mit einem COM-Objekt in meiner .NET-Anwendung .... und dass Fehler würden zufällig in verschiedenen Teilen des Codes angezeigt. Schließlich, nach viel Zeit debbugging, fand ich, dass die folgende Zeile den Fehler verursacht wurde:

arr = doc.GetAllExternalReferences3(objOptions, objRefVar, objIsVirtual)

objRef und objIsVirtual waren byref Parameter. Ich bin kein Interop-Experte, aber es scheint, dass das Umwandeln von den ursprünglichen Typen (in COM) nach "Objekt" in .NET nicht sehr gut funktionierte, besonders wenn der Umfang dieser Objekte beendet war. Wie auch immer, ich brauchte diese Werte nicht und es gab eine überladene Methode, die diese Parameter nicht benötigte. Ich hatte also Glück und musste nicht tief in die COM-Interop-Details eindringen. Wie auch immer, ich gelernt, dass man sehr vorsichtig sein muss mit dem, was ein COM-Objekten zurück zum .NET ....

Nicht sicher, ob dies der Fall für Sie. Aber vielleicht kann diese Antwort jemandem helfen, der nach dieser Nachricht sucht.

0

Ohne viel weiter zu gehen sind die Benutzerberechtigungen auf dem einen PC unterschiedlich?

+1

Dieser Fehler tritt auf, wenn der Speicher fehlerhaft oder beschädigt ist - es hat nichts mit Benutzerberechtigungen zu tun. –

+0

Es kann ein Dauerwellenproblem sein. – klabranche

+0

Können Sie das bestätigen? –

3

Ich glaube nicht, dass dies mit Benutzerberechtigungen zu tun hat, wie andere gesagt haben.

Ich habe dies zuvor bei der Arbeit mit unsicheren Zeigern in C# erlebt. Dies ist der Fehler, den Sie bekommen, wenn Sie versuchen, auf den Speicher eines anderen Programms zu schreiben.

Was Sie könnten versuchen, zu tun (ein Debug-Build auf Ihre Prüfmaschinen neben der Bereitstellung) auf dem Access drehen innerhalb des Visual Studio. Sie können dies tun, indem Sie auf Debug> Ausnahmen> Common Language Runtime Exceptions> System gehen. Aktivieren Sie das Kontrollkästchen neben System.AccessViolationException. Wenn Sie Glück haben, sehen Sie, wo der Fehler auftritt.

Edit:

Zusätzlich habe ich diesen älteren Beitrag gefunden, wo ein anderes Plakat ein ähnliches Problem hat: Attempted to read or write protected memory

+0

Nützlicher Tipp (Pause bei AccessViolationException) +1 – krebstar

+0

Hallo, ich weiß nicht, ob es reaalted ist oder nicht. Was ich noch sagen wollte, ist, dass ich diese DLL auch in meinem anderen C# -Win-Formular verwende, das keine Benutzersteuerung verwendet. Aber diese API funktioniert gut. Also habe ich das gesamte Benutzersteuerelement in Fensterform geändert. Seit diesem Zeitpunkt ist dieses Problem nie wieder aufgetreten. Ich kann immer noch nicht herausfinden warum. – TNA

+0

Es hört sich an, als ob Ihre Benutzersteuerung etwas falsch gemacht hat. Was war der Zweck der Benutzerkontrolle? Ich bin froh, dass das Problem nicht mehr passiert, aber wenn ich du wäre, würde ich immer noch die Ursache wissen wollen :) –

Verwandte Themen