Eine Lösung für die Anomalie der Sekundärentwicklung durch Aufrufen der VSPD-DLL.

Ich habe kürzlich studiert und mir vorgestellt, ein C#-Programm zu erstellen, das eine virtuelle serielle Schnittstelle implementiert. Da ich nicht weiß, wie man einen Treiber schreibt, folgte ich der Methode meines Bruders und rief die offene DLL-Schnittstelle von VSPD auf, um sie zu implementieren .

Extrahieren Sie das unabhängige Treiberinstallationspaket aus dem VSPD-Installationspaket für den virtuellen COM-Port (Entwicklung virtueller serieller Ports und Dekomprimierung von EXE-Programmen) http://blog.csdn.net/xxdddail/article/details/17163035

Da es das erste Mal war, dass eine DLL aufgerufen wurde, sind viele Fehler aufgetreten, die ich hier mit Ihnen teilen werde.

Erstens kann nicht direkt auf die VSPD-DLL verwiesen werden.

Andernfalls erscheint die folgende Fehlermeldung.

Der richtige Weg besteht darin, die DLL in den Debug-Ordner Ihres Programmordners zu legen und sie zusammen mit Ihrer Exe-Datei zu belassen. Klicken Sie dann mit der rechten Maustaste in das Programm und generieren Sie es neu.

 Sehen Sie sich dann das VSPD-Benutzerhandbuch und die entsprechende Schnittstelle an (in „Funktionen“ unter „Verwenden des seriellen Port-Treibers in Ihrem Programm“) und schreiben Sie den entsprechenden Aufruf in C#. Das Folgende ist der Code. (Hier ist eine Demonstration des Aufrufs zum Erstellen einer seriellen Schnittstelle.)

[DllImport("vspdctl.dll")]//引用DLL
        public static extern bool CreatePair(string comName1, string comName2);

Rufen Sie dann diese Methode auf. Ich schreibe ein Formular, also schreibe ich die Methode in einen Button.

using static CreatePortDemo.VSPDClass;//注意引用你写接口的类

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                bool IsCrateSeccuss = CreatePair(CreatePortName.Text, CreatePortName2.Text);;//因为接口返回是一个bool值,用一个bool值存储起来是否创建成功
                if (IsCrateSeccuss)
                {
                    MessageBox.Show("创建成功");
                }
                else
                {
                    MessageBox.Show("失败");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            
            
            
        }

Dann debuggen, und dann könnte das folgende Problem auftreten.

Oder es reagiert längere Zeit nicht und am Ende wird kein Fehler gemeldet, aber es stürzt ab und wird beendet, und die Ausgabeliste zeigt: AccessViolationException .

Was ist das für eine Anomalie? Ich wusste es zunächst nicht, weil selbst der Versuch, es zu fangen, es nicht fangen konnte, aber ich habe es später überprüft.

AccessViolationException: Versuch, in den geschützten Speicher zu lesen oder zu schreiben. Dies weist normalerweise darauf hin, dass ein anderer Speicher beschädigt ist .

Also begann ich mich zu fragen, ob meine DLL falsch war. Also ging ich online, lud erneut eine VSPD-DLL herunter und verglich sie mit meiner eigenen DLL. Hmm ... der neue Download ist mehr als 3000 KB groß und meiner ist mehr als 100 KB groß .

Es muss sein, dass meine DLL defekt ist und nicht mehr ausgeführt werden kann . Nachdem ich also die DLL geändert und erneut getestet habe, wurde kein Fehler gemeldet .

Aber nur weil kein Fehler vorliegt, heißt das nicht, dass er behoben wurde !

[DllImport("vspdctl.dll")]//引用DLL
        public static extern bool CreatePair(string comName1, string comName2);

 Ich habe diese Funktion verwendet, um eine virtuelle serielle Schnittstelle zu erstellen, die „true“ zurückgibt, wenn die Erstellung erfolgreich ist, und „false“, wenn sie fehlschlägt.

Ich habe if else verwendet, um eine einfache Eingabeaufforderung zu schreiben. Wenn true empfangen wird, wird „Erfolg“ angezeigt, andernfalls wird „Fehler“ angezeigt.

Das Ergebnis ist, dass beim Testen immer wieder „true“ zurückgegeben wurde, die serielle Schnittstelle jedoch überhaupt nicht erstellt wurde !

 Diese Situation ist wie wenn ich ein ungezogenes Kind auffordere, seine Hausaufgaben zu machen, und er mir sagt, „es ist erledigt“, wenn er fertig ist, aber er sagt mir, „es ist erledigt“, ohne überhaupt etwas zu schreiben . Traurig und wütend beschloss ich, ein Nickerchen zu machen.

Als ich am Nachmittag aufwachte, wurde mir plötzlich klar, dass die VSPD im Computer nicht mit der neu heruntergeladenen DLL-Version übereinstimmte .

Also habe ich schnell die gleiche Version von VSPD heruntergeladen und installiert. Im Ergebnis war der Test erfolgreich .

 Kein Wunder, dass ich auf Baidu niemanden finde, der in der gleichen Situation ist wie ich. schwach!

Lösung: Laden Sie ein VSPD herunter, das zur DLL passt. Die DLL muss mit der VSPD-Version Ihres Computers übereinstimmen, um die Schnittstellenfunktion erfolgreich nutzen zu können.

 Referenzmaterialien ( auch meine traurige Reise ):

Ausnahmen, die C# nicht abfangen kann, wie etwa AccessViolationException – A Lone Ape – Blog Garden (cnblogs.com)

(1 Meldung) C#: AccessViolationException: Versuch, in den geschützten Speicher zu lesen oder zu schreiben. Dies weist normalerweise darauf hin, dass ein anderer Speicher beschädigt ist. Solution Collection_Debris Balls Blog-CSDN-Blog

(2 Nachrichten) Extrahieren des unabhängigen Treiberinstallationspakets aus dem VSPD-Installationspaket für den virtuellen COM-Port (Entwicklung virtueller serieller Ports und Dekomprimierung von EXE-Programmen)_Von Zeit zu Zeit lernen_CSDN-Blog

(2 Meldungen) C#-Fehler beim Aufrufen des Blog-CSDN-Blogs des Drittanbieters dll_BIGE_BIGGER

C# ruft C++dll auf und meldet den Fehler ACCESS VIOLATION-CSDN Community

(2 Nachrichten) Zwei Möglichkeiten zum Aufrufen der Schnittstelle in c#_Ink Direct Blog-CSDN Blog_C# Aufrufen der Schnittstelle

(2 Nachrichten) Aufruf einer DLL in C#_yaked19s Blog-CSDN Blog_C# Aufruf einer DLL

(2 Meldungen) C# ruft C++-DLL auf, PInvoke-Problem und Rückruffunktion lösen Ausnahmezugriffsverletzung aus_Zhiyuanfang-Wind and Rain Blog-CSDN Blog

(2 Nachrichten) Gründe und Lösungen für Abstürze beim Aufruf einer Drittanbieter-DLL_Brown Lihuamaos Blog-CSDN-Blog

Supongo que te gusta

Origin blog.csdn.net/aa989111337/article/details/126033160
Recomendado
Clasificación