Probleme beim Erweitern VB5-Programm

OP #6402285
Lesenswert?

beim Velleman PCGU1000-Generator ist ein VB6-Beispiel dabei mit dem 
gezeigt wird wie der Generator über FGULINK.dll programmiert werden 
kann. Das funktioniert auch. Eine neuere FGULINK.dll mit 44kB erlaubt 
auch das Einstellen des Tastverhältnisses. Für den Test habe ich im 
Beispielcode im Form 2 Buttons hinzugefügt und im Code Private Sub 
Command7_Click und Private Sub Command8_Click ergänzt wo das DutyCycle 
dann gesetzt wird.
1
Private Sub Command7_Click() ' rectangle 1600Hz 7.5Vss 2Voffset, DutyCycle 90%
2
    SetGen 2, 1600, 7.5, 2   ' Generator einstellen: Rechteck, 1600Hz, 7.5Vss, 2V Offset
3
    SetDutyCycle 90          ' Tastverhaeltnis 90%
4
    StartGen                 ' Generator starten: Relais ein
5
End Sub
6

7
Private Sub Command8_Click() ' rectangle 1700Hz 8.5Vss 2Voffset, DutyCycle 10%
8
    SetGen 2, 1700, 8.5, 1   ' Generator einstellen: Rechteck, 1700Hz, 8.5Vss, 1V Offset
9
    SetDutyCycle 10          ' Tastverhaeltnis 10%
10
    StartGen                 ' Generator starten: Relais ein
11
End Sub

leider kommt beim Aufruf "Fehler beim Kompilieren: Sub oder Function 
nicht definiert".

Weiß jemand wie ich das loswerde?

Gruss
Matthias
OP #6402384
Lesenswert?

MaWin schrieb:
> Das ist ein fertiges Projekt?

das Beispiel für VB6 war im Netz zu finden, incl. exe. Das exe läuft 
einwandfrei - halt ohne diese DutyCycle-Erweiterung.

ich habe nur ein paar Zeilen im Projekt addiert - und schon gibt es 
leider unerwarteten Stress.

wenn Du das testen willst sag Bescheid. Dann stell ich die Dateien zur 
Verfügung. Das ist Code von Velleman.
#6402613
Lesenswert?

Hallo Matthias W.,

bitte den Fehler eingrenzen!
Bau' Deine neuen Prozeduren Stück für Stück auf.
Kommentiere alle Deine externen Funktionsaufrufe aus.
Guck' mal ob die Command_Clicks laufen an sich isoliert laufen.

Bitte debuggen, oder

Msgbox "Hallo"

einbauen.

Beachte den Gültigkeitsbereich von VBA-Variablen.
Liegen die Command_Click-aufrufen auch im VBA-Editor unter dem 
aufrufenden Tabellenblatt oder irgendwo sonst in einem Modul oder unter 
einem falschen Blatt?

Sebastian S. schrieb:
> Das sieht stark nach Salami aus: Scheibchen für Scheibchen.
>
> Unvollständiger Code: Geht euch nichts an; Braucht Ihr nicht.
> Fehlerhafte Sequenzen: "Das habe ich so nicht verwendet!"
>
> Viel spaß noch!

Der Sebastian S. hat mit seiner Kritik schon Recht...
#6402672
Lesenswert?

Also das VB-Beispiel in dem Archiv "pcgu1000_sdk_rev5.zip" kann ich ohne 
Fehler in VB5 ausführen. Bei der Schaltfläche 'Turn On Generator' 
erscheint das "Function Generator"-Fenster.
Wenn ich zwei Schaltflächen mit deinen Code-Schnippseln erstelle, und 
die Declare-Anweisung einfüge, funktioniert es ebenfalls.
Da ich weder dieses Gerät, noch deine weiteren Änderungen im Code habe, 
kann ich nichts weiter tun.

Das Archiv "FGULINK_v5.0_Demo_Delphi.zip" finde ich nicht.
Gast #6402690
Lesenswert?

Ich würde mal sagen. EINE IST ZU WENIG.

Aus den Beispielcode.

Private Declare Sub SetGen Lib "FGULink.dll " (ByVal func As Long, ByVal 
freq As Single, ByVal ampl As Single, ByVal offset As Single)
Private Declare Sub SetSweep Lib "FGULink.dll " (ByVal freq1 As Single, 
ByVal freq2 As Single, ByVal ampl As Single, ByVal offset As Single, 
ByVal time As Single, ByVal Form As Long)
Private Declare Sub SetLibWave Lib "FGULink.dll " (ByVal freq As Single, 
ByVal ampl As Single, ByVal offset As Single, ByVal filter As Long, 
ByVal Pointer As String)

Private Declare Sub StartGen Lib "FGULink.dll " ()
Private Declare Sub StopGen Lib "FGULink.dll " ()
Private Declare Sub OpenGen Lib "FGULink.dll " ()
Private Declare Sub CloseGen Lib "FGULink.dll " ()
Private Declare Function GenReady Lib "FGULink.dll " () As Boolean
Private Declare Function GenStatus Lib "FGULink.dll " () As Long
Private Declare Sub ShowGen Lib "FGULink.dll " (ByVal status As Boolean)
Private Declare Sub AttOn Lib "FGULink.dll " (ByVal att As Boolean)
Private Declare Sub LogSweep Lib "FGULink.dll " (ByVal log As Boolean)


DAS kopierst du SO aus den Beispielcode.  Und zwar entweder in die 
GLOBAL.BAS (normale Textdatei die unter diesen Namen ins Projekte 
eingebunden wird)  oder in JEDE Form die du aufrufst. !!!

Dann sollte es funktionieren.

Die GLOBAL.BAS geht in jeder VB-Version. Alles war darin deklariert 
wird, gilt für das ganze Projekt. Also auch Variablen die man mit DIM 
deklariert.

Wichtiger Hinweis. In der GLOBAL.BAS muss "Private" mit "Public" 
erstetzt werden.
Gast #6402695
Lesenswert?

Nachtrag :
Das ist alter VB 6.0 Code. in VB-2010 macht man das anders.

Da linkt mit in den Projekt-Eigenschaften via klicki die DLL dazu. Im 
Code schreibt man nur noch in die 1 Zeile #imports FGULink" Und ruft die 
Funktionen der Lib mit FGULink.StartGen  auf.
Gast #6402734
Lesenswert?

Peter D. schrieb:
> Es wird nur ein Tippfehler im Code sein, oder unabsichtlich ein Zeichen
> gelöscht oder so. Darauf deutet zumindest die Fehlermeldung hin.

Die Fehlermeldung sagt "Sub o. Funktion nicht gefunden."  Die Lösung 
ist, mein kopierten Code KOMPLETT !!!! in sein Projekt rein zu kopieren.

Die DLL ist so gecodet das sie alles einzeln macht. Ergo muss man auch 
alles einzeln deklarieren = viele viele Declare-Befehle. ;)

Und dann läuft das Teil. ;)
#6402759
Lesenswert?

Hallo Peter D.,

Peter D. schrieb:
> Es wird nur ein Tippfehler im Code sein, oder unabsichtlich ein Zeichen
> gelöscht oder so. Darauf deutet zumindest die Fehlermeldung hin.
> Normalerweise wird sogar die fehlende Sub oder Function im Code
> markiert, wenn man mit Strg+F5 startet.

bitte meinen Beitrag oben ignorieren - der zweite Teil bezüglich VBA hat 
das Thema vollkommen verfehlt, es geht ja nicht um Excel sondern um 
"stand alone VBA".

Danke!
OP #6402878
Lesenswert?

Sebastian S. schrieb:
> Das sieht stark nach Salami aus: Scheibchen für Scheibchen.

sag halt einfach Deinen Wunsch Sebastian. So ein Gelöhle bringt hier 
niemand weiter. Das kannst Du Dir echt sparen !

wenn Du Code willst - so lad ihn einfach runter. Die Links sind ja da. 
Baue dann selbst die Zeilen ein und schau ob und warum es klemmt !

wenn Du willst schick ich Dir auch den Code den ich hier habe. Nur 
leider weiß ich nicht wo VB das abgelegt hat. In den Dateien die ich 
geöffnet habe fand ich den Code schlicht nicht.
OP #6402890
Lesenswert?

Peter D. schrieb:
> Wenn ich zwei Schaltflächen mit deinen Code-Schnippseln erstelle, und
> die Declare-Anweisung einfüge, funktioniert es ebenfalls.

ja. Das war bei mir auch so. Das Problem kam als ich für diese beiden 
Schaltflächen dann die "Private Sub Command7_Click()" und "Private Sub 
Command8_Click()" hinzufügte. Wenn ich diese beiden Teile auskommentiere 
kommt kein Fehler - aber es wird dann eben auch nichts aufgerufen.

So ein Hexenwerk kann das doch nicht sein.
OP #6402894
Lesenswert?

Schlaumaier schrieb:
> Ergo muss man auch
> alles einzeln deklarieren = viele viele Declare-Befehle. ;)
> Und dann läuft das Teil. ;)

das Beispiel von Velleman lief/läuft ja auch !
hinzu kam nur die Zeile mit dem DutyCycle, die andere neuere DLL 
deswegen und die Zeilen wo dieser DutyCycle dann aufgerufen wird.

das ist alles sehr einfach und es gibt doch kaum Möglichkeiten dabei 
viel falsch zu machen. Daher ist mir auch diese Fehlermeldung so unklar.
#6402924
Lesenswert?

Schlaumaier schrieb:
> In den Link zu der Lib ist auch in der Dokumentation der Befehl
> SetDutyCycle nicht dokumentiert.  Ergo ist klar wieso VB den an
> meckert.
>
> Für VB ist der Aufruf eine Sub bzw. Funktion.

Nein, das stimmt nicht. Du kannst in VB5/6 DLL-Aufrufe deklarieren, die 
in der DLL nicht vorhanden sind. Es gibt erst zur Laufzeit, beim Aufruf 
der Prozedur einen Fehler mit "DLL-Einsprungspunkt XYZ nicht gefunden."
OP #6402964
Lesenswert?

Schlaumaier schrieb:
> und das Resulat war ein Komma zu viel in den
> ca. 1000 Data-Zeilen. ;)

ok. Das kann ich nachvollziehen !
Bei Dir waren es wenigstens so viele Zeilen.

Bei mir sah ich den Fehler nicht mal in den wenigen Zeilen, vor allem 
wohl weil ich ihn eher da vermutete wo das Programm mit der roten 
Fehlermeldung hinwies.

Da kann man sehen wie man fehlgesteuert wird und am Ende das Problem 
einfach übersieht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren