myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

DLL Wirrwarr C++ VB6

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 21.09.10, 15:37   #1
Miedon
Anfänger
 
Benutzerbild von Miedon
 
Registriert seit: Sep 2010
Ort: NRW
Beiträge: 13
Bedankt: 3
Miedon ist noch neu hier! | 0 Respekt Punkte
Standard DLL Wirrwarr C++ VB6

Hallo alle zusammen,
ich hab mal wieder ein Problem. Ich muss einen Teil eines alten VB6 Programms nach C++ übersetzen und soll die Funktionalität in eine DLL packen. Soweit so gut. Eigentlich ist das alles simple Mathematik, die ich da übersetzen muss und die ersten paar Funktionen klappten auch ganz gut, bis ich auf eine Funktion stieß die Funktionen aus einem anderen Modul aufruft. Das ist ja eigentlich auch nichts außergewöhnliches und ich hab mir dann gedacht dann packe ich die halt auch noch in meine DLL und übersetze die. Ist ja kein Problem. Als ich mir die Funktionen des anderen Moduls angeschaut hab stellte sich herraus das es aber doch ein Problem ist. Der Code dieser Funktionen sieht ungefair so aus:
Code:
8720 If Abs(qy) >= Abs(q6) Then qg = 3: Q0 = q1: q1 = q2: q2 = qx: q4 = q5: q5 = q6: q6 = qy: GoTo 8860
8730 q1 = q2: q5 = q6: q2 = qx: q6 = qy: GoTo 8760
8740 If q5 * qy < 0 Then q2 = q1: q6 = q5
8750 q1 = qx: q5 = qy: If Abs(qy) < Abs(q6) Then q1 = q2: q5 = q6: q2 = qx: q6 = qy
8760 qd = q5 - q6: If qd Then qd = (q5 + q6) / qd: If qg Then If Abs(qd) > 0.9 Then qd = 0.9 * Sgn(qd)
8770 If qg = 0 Then If Abs(qd) < qf * qf Then qd = qf * qf * (Sgn(qd) Or 1)
8780 GoTo 8880
8790 If q6 * qy < 0 Then qg = 1: GoTo 8750
Ich hab jetzt hier einfach mal nen kleinen Auszug kopiert damit ihr wisst wovon ich spreche. Ich dachte mir jetzt ich mache es mir einfach und mache einfach aus dem VB6 Code da eine DLL die ich dann in meiner C++ DLL aufrufen können müsste. Gesagt getan. (ich hab mich dabei an das Tut hier gehalten: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] ) So aber meine VB6 DLL funktioniert weder in meinem C++ Code noch in einer VB.net Testumgebung. Ich hab jetzt schon ewig an der DLL rumgedocktert und hab eigentlich keine Lust mehr da weiter zu machen. Hat jemand von euch eine Idee wie ich denn Code in meine C++ DLL bekommen und da verwenden kann? Am liebesten ohne mich ewig mit den Kram da oben auseinander zu setzen. Ist das so überhaupt möglich über eine DLL? Ich hab sowas noch nie gemacht.

Danke schon mal für eure Hilfe.
Miedon ist offline   Mit Zitat antworten
Ungelesen 21.09.10, 17:19   #2
kramido
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
kramido ist noch neu hier! | 0 Respekt Punkte
Standard

Also:
Grundlegend ist der Aufruf einer selbsterstellten DLL kein Problem. Was würden sonst Anwendungsentwickler machen, die neue Bibliotheken zur Verfügung stellen wollten?

Die Sprache innerhalb einer DLL sollte jedoch schon konsitent sein. Daher wird es schwierig VB-Code mit C++-Code in einer DLL zu mischen (das .NET-Framework sei hier außen vor gelassen). Du müsstest also mit Hilfe von VB eine DLL erstellen.

Wo genau liegt dein Problem bei der Erstellung der DLL? Kannst du die Methoden nicht aufrufen? Die DLL nicht importieren? Oder woran liegt es?

Verwendest du VB6 für die DLL? Ich bin mir nicht sicher, ob VB.NET noch goto beherrscht..
kramido ist offline   Mit Zitat antworten
Ungelesen 22.09.10, 08:18   #3
Miedon
Anfänger
 
Benutzerbild von Miedon
 
Registriert seit: Sep 2010
Ort: NRW
Beiträge: 13
Bedankt: 3
Miedon ist noch neu hier! | 0 Respekt Punkte
Standard

Ja da hast du schon recht, normalerweise ist der Aufruf einer selbsterstellten DLL kein Problem und das die Sprache innerhalb einer DLL konsistent sein sollte ist mir klar, sonst würde bestimmt auch der Compiler mäckern. Ich habe auch nicht vor Code zu mischen.

Bei mir ist das so, ich habe zwei alte VB6 Dateien und ich muss die Funktionalität der Dateien in einem VB.Net Programm benutzen können. Außerdem kommt es ein wenig auf die Geschwindigkeit an.

In der ersten Datei werden eigentlich die Dinge berechnet die ich in meinem Programm brauche und diese benutzt Funktionen aus der zweiten Datei um die Nullstellen einer beliebigen Mathematischen-Funktion zu berechnen (das ist der Kram mit dem goto). Die erste Datei habe ich jetzt eigentlich in eine C++ DLL übersetzt und wenn ich die in einem VB.net Programm aufrufe dann funktioniert das auch ohne Probleme. Manche der Funktionen rufen aber Funktionen aus Datei 2, also die Sachen mit dem goto.
Da ich mir jetzt nicht die Mühe machen will und den ganzen QuickBasic Kram nach C++ übersetzen (ich glaube das ist QuickBasic bin mir aber nicht sicher) wollte ich aus Datei 2 auch eine DLL machen und zwar in VB6. Diese DLL möchte ich dann jetzt in meiner ersten DLL aufrufen.

Eigentlich sollte ja dann auch die Sprache keine Rolle mehr spielen und ob ich ein goto benutze müsste dann auch egal sein wenn es erst mal eine DLL ist, nur diese DLL die ich aus dem VB6 Code erstellt hab nach oben genannter Anleitung die funktioniert weder in VB6 oder VB.net noch in C++.
Z.B. bekomme ich mir der LoadLibary Funktion in C++ immer nur NULL zurück aber das gibt es doch nicht viel was man falsch machen kann. Ich geb den Pfad zu der DLL an und speichere den Rückgabewert als Handle, das war es dann ja eigentlich schon. Ich hab das Gefühl das das erstellen der DLL in VB6 schon schief gegangen ist aber da bekomme ich weder eine Fehlermeldung noch sonst irgendwas.

Auf jeden fall schon mal danke für deine Mühe.
Miedon ist offline   Mit Zitat antworten
Ungelesen 22.09.10, 19:57   #4
kramido
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
kramido ist noch neu hier! | 0 Respekt Punkte
Standard

Gut, dann wären ja alle relevanten Grundlagen geklärt.

Ist denn die Lade-Methode der DLL korrekt initialisiert? Wird hierbei ein erfolgreicher Wert zurückgegeben?

VB6 und Geschwindigkeit sind nicht unbedingt Freunde Evtl. wäre eine automatische Übersetzung möglich? [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Ob ein QBasic-C-Converter funktioniert kann ich dir nicht sagen. würde ich jedoch eventuell mal probieren.
kramido ist offline   Mit Zitat antworten
Ungelesen 27.09.10, 15:25   #5
Miedon
Anfänger
 
Benutzerbild von Miedon
 
Registriert seit: Sep 2010
Ort: NRW
Beiträge: 13
Bedankt: 3
Miedon ist noch neu hier! | 0 Respekt Punkte
Standard

Ja ich denke das ist alles Korrekt.
Ich hab mal probiert das automatisch zu übersetzen, dass hat allerdings auch nicht funktioniert.
Ich hab am Wochenende noch was an der DLL rumgebastelt und es funktioniert jetzt. Ich hab zwar keine Ahnung woran es gelegen hat aber es geht. Und frei nach dem Motto "Never touch a running system" lass ich jetzt schön die Finger davon.

Danke noch mal für deine Mühe.
Miedon ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.


Sitemap

().