by Guest » 22 Dec 2024, 19:23
Ich habe ein einfaches .net7-Konsolenprojekt, das auf eine COM-DLL verweist.
Der in .net7 ausgeführte Code bricht nach der Konvertierung in .net8
COM ab Das Objekt wurde erfolgreich erstellt.
Marshal.IsComObject gibt „true“ für seine Instanz zurück.
Der Versuch, auf eine Eigenschaft zuzugreifen, löst jedoch eine AccessViolationException aus.
Es wurde versucht, oder zu lesen schreibgeschützter Speicher. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Das Plattformziel des Projekts ist x86.
STAThread wird angewendet.
Das Problem besteht auch dann weiterhin, wenn EmbedInteropTypes wahr oder falsch ist.
Was kann das Problem verursachen?
Jede Hilfe wäre dankbar.
Bearbeiten:
COM dll wird mit regsvr32 registriert.
Der Code sieht wie folgt aus:
var obj = new InteropClass();
Console.WriteLine(obj.SomeProperty);//throws AccessViolationException
Wenn das Plattformziel x64 oder AnyCpu ist, wird eine ComException ausgelöst (80040154 Klasse nicht registriert)
Diese COM-DLL stammt von Software von Drittanbietern und ist Funktioniert wie erwartet in .net7 und früher.
Der Wechsel zu .net8 verursacht die Ausnahme.
Andere COM-Objekte funktionieren nach dem Upgrade hervorragend und ich frage mich, ob es welche gibt Einstellung, um dieses Problem zu lösen Problem.
Ich habe ein einfaches .net7-Konsolenprojekt, das auf eine COM-DLL verweist.
Der in .net7 ausgeführte Code bricht nach der Konvertierung in .net8
COM ab Das Objekt wurde erfolgreich erstellt.
Marshal.IsComObject gibt „true“ für seine Instanz zurück.
Der Versuch, auf eine Eigenschaft zuzugreifen, löst jedoch eine AccessViolationException aus.
Es wurde versucht, oder zu lesen schreibgeschützter Speicher. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Das Plattformziel des Projekts ist x86.
STAThread wird angewendet.
Das Problem besteht auch dann weiterhin, wenn EmbedInteropTypes wahr oder falsch ist.
Was kann das Problem verursachen?
Jede Hilfe wäre dankbar.
Bearbeiten:
COM dll wird mit regsvr32 registriert.
Der Code sieht wie folgt aus:
var obj = new InteropClass();
Console.WriteLine(obj.SomeProperty);//throws AccessViolationException
Wenn das Plattformziel x64 oder AnyCpu ist, wird eine ComException ausgelöst (80040154 Klasse nicht registriert)
Diese COM-DLL stammt von Software von Drittanbietern und ist Funktioniert wie erwartet in .net7 und früher.
Der Wechsel zu .net8 verursacht die Ausnahme.
Andere COM-Objekte funktionieren nach dem Upgrade hervorragend und ich frage mich, ob es welche gibt Einstellung, um dieses Problem zu lösen Problem.