Aufruf eigener DLL [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Aufruf eigener DLL [ERLEDIGT]

Beitrag von Manfred »

Hi,

es ist doch so, wenn ich eine eigene DLL einbinden will, dann gebe ich in dem Projectfile die entsprechende .Lib an und lege dann die .DLL in z.B. das Programmverzeichnis. Wenn die DLL fehlt, dann meckert das Programm beim Start.

Ich habe jetzt eine weitere .DLL in dem Projectfile angegeben und dabei aber nicht die .DLL zur Verfügung gestellt. Das Programm meckert überhaupt nicht, sondern arbeitet ohne. Was geht hier vor? Was muß/kann man falsch machen, das sowas geht?

Ich stehe vor einem Rräätsel.
Zuletzt geändert von Manfred am Mo, 24. Nov 2008 16:21, insgesamt 2-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2950
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 14 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
vielleicht hast du das prg-file für die DLL auch noch in deine EXE gelinkt ? Ist mir nämlich auch mal passiert.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Ja,

es ist immer dieselbe Crux. Ich stelle die Frage hier rein und dann....


Kann es sein, dass man auch eine Routine aus dieser DLL aufrufen muß? Ich hatte die LIB eingebunden um etwas zu testen. Hatte aber wohl explizit nichts daraus aufgerufen. Ich hatte mich auch schon gewundert, warum keine Meckerei beim Compilieren kam wegen doppelter Funktionsnamen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Merkwürdig,

jetzt habe ich den Aufruf aus der LIB ausgeremt, aber es wird trotzdem gemeckert. Wird da irgendwo was eingetragen, wenn es denn mal aufgerufen wurde? Ich finde keine Eintragsänderung.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi Wolfgang,

sorry, habe gerade gepennt. Nein, nicht das ich wüßte. Ich habe ein bestehendes Projectfile mit einer LIB Angabe nur um die weitere ergänzt, weil ich etwas testen wollte. Und dann sowas...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von brandelh »

Hallo Manfred,

vom Prinzip her ist das so (soweit ich das beurteilen kann ;-) ) ...

Der Linker von Alaska muss zu jeder Funktion einen Verweis finden.
Wenn du beides in der EXE hast, dann ist er zufrieden und setzt die
Adresse der Funktion bei jedem Aufruf ein.
Wenn er nun diese Funktion aber nicht im OBJ (vom Compiler aus PRG)
findet, dann durchsucht er alle LIB Dateien nach einer solchen
Funktion und merkt sich notfalls die aufgeführte DLL mit der Adresse.

Findet er auch da nix, dann meldet der Linker beim Erstellen der EXE,
dass er eine Funktion nicht finden (auflösen) kann.

Zur Laufzeit sind natürlich alle Funktionen mit Adressen in der EXE
vorhanden, aber es kann sein, dass eine DLL fehlt.
Dann meckert jetzt das Runtime-System, dass die DLL fehlt, die
der Linker eingetragen hatte.

Ganz einfach oder :D
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von Jan »

Hallo Manfred,

Du machst das in der Projektdatei ja immer manuell, oder? Ohne VX?

Wegen des Nicht-Anmeckerns: Ich hab das noch nie ausprobiert, da mal eine benötigte dll nicht ins Programmverzeichnis reinzukopieren. Ich denke aber, daß das Programm erst dann meckern wird, wenn eine in der dll untergebrachte Funktion aufgerufen werden soll. Das müsste dann also z. B. beim Programmstart überprüft werden, oder beim Funktionsaufruf (was ich mir aber etwas aufwändig und resourcenzehrend vorstelle)

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von brandelh »

Hi,

noch was, eine LIB ist sozusagen das Inhaltsverzeichnis einer DLL für den Linker.

Im Projektfile wird also die LIB angegeben, die DLL wird erst zur Laufzeit benötigt.

Ich denke, dass erst beim ersten Aufruf einer DLL Funktion geprüft wird,
ob diese auch vorhanden ist.
Wenn du keine Funktionen aus einer DLL im PRG aufrufst, dann wird auch
nichts aus der DLL geholt, obwohl du die LIB aufführst.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi,

ich habe es jetzt einmal andersherum ausprobiert und bin jetzt noch mehr verwirrt.

Also, ich hatte zuerst nur die Angabe der Obj Datei und der LIB Datei angegeben in dem Projectfile. Das habe ich händisch über VX im Projectfile gemacht.
Das hatte GAR NICHTS zur Folge.

Dann habe ich einen Funktionsaufruf eingebaut, um zu testen, ob sich überhaupt etwas tut. Da kam dann der Hinweis, dass es doppelte Namen usw. gibt. Also dass was ich eigentlich schon vorher erwartet hatte.
Gut, als nächstes habe ich dann die Aufrufe ausgeremt, aber es blieb, die Fehlermeldung kam wieder.
Jetzt habe ich die OBJ und LIB Datei in dem Projectfile ausgeremt, VX hat sie dann entfernt (Grummel) und das Thema war gelutscht.

Danach habe ich, wie ganz zu Anfang, die OBJ Datei und die LIB wieder händisch eingetragen und siehe da, jetzt kommt die Meckerei, ohne Aufruf der Funktion sofort

Das muß ich jetzt nicht verstehen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von Jan »

Manfred,

wie jetzt, Du machst das mit VX?

Wenn Du die procect.xpj in VX manuell nacharbeitest, dann hat das meist Null Wirkung. Das hat mich auch schon des öfteren zur Verzweifluung getrieben. Ich mach das jetzt immer so (wenn ich das denn selten mal machen muß), daß ich die Projektdatei im normalen Editor öffne, die Änderungen einbaue, und dann erst wieder mit VX öffne. Alles andere gibt nur graue Haare.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi Jan,

wie jetzt? Ja klar! Wenn ich die VX offen habe und dann mit ALT+1 das Fenster öffne, dort auf das XPJ File gehe um dann View Project Source anklicke, wird die Datei geöffnet. Dann gehe ich in die Stop Autodepent Sektion und trage dort von Hand was nach. Das klappt. "//" das hier will die VX nicht, dann wird die gesamte Zeile entfernt. Ansonsten habe ich keine Probleme. Müßte/Sollte das anders gehe, oder gemacht werden? Klär mich auf und laß mich bloß nicht dumm sterben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von brandelh »

Hallo Manfred,

du schreibst, dass du die OBJ im Projektfile angegeben hast ... GROßER FEHLER !
Bei VX gibt man PRG und LIB im Verwaltungswerkzeug an (das kenne ich aber nicht ;-) )
Sonst gibt man PRG und LIB in der Rubrik an, unter den automatisch erzeugten Teilen.
OBJ gibt man hier höchstens dann an, wenn es sich um nicht Xbase++ Obj handelt,
falls dies überhaupt geht - habe ich noch nie gemacht ;-)

UND DANACH ruft man PBUILD /G auf, sonst gibt es nur Ärger !

Alles andere ist entweder gefährlich oder vergeblich wenn die Automation wieder alles überschreibt.

Am Besten gibt man #PRAGMA Anweisungen in jedem PRG an, das Funktionen aus einer anderen DLL verwendet.
Denn dann braucht man sich um nichts mehr zu kümmern, solange VX oder PBUILD /G verwendet wird.
Gerade wenn man PRGs wiederverwendet spart das jede Menge Ärger.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi Hubert

Code: Alles auswählen

[PROJECT]
    DEBUG         = yes
    VERSION       = 2.0
    OPENFILES     = zustand.prg;zubehoervt.prg;zahlungsartenvt.prg;wgvt.prg;vovt.prg;versandartvt.prg;verleihpreisevt.prg;uwgvt.prg;titelvt.prg;systemvt.prg;steuersatz.prg;staatenvt.prg;shdstammdaten.prg;plzvt.prg;phnvostammabgleich.prg;phntrgartenkonvert.prg;phnsystemvt.prg;phnprgartenkonvert.prg;phnparaallgemeinvt.prg;phngenrekonvert.prg;personalvt.prg;para_station.prg;kundenvt.prg;kundenanredenvt.prg;interpretvt.prg;herstellervt.prg;genrevt.prg;filialenvt.prg;ean13vt.prg;bundesland.prg;BUCHUNGSKONTOVT.PRG;bankenvt.prg;ankaufparametervt.prg
    project.XPJ

[project.XPJ]
    y:\video9\programm\shdstammdaten.exe

[y:\video9\programm\shdstammdaten.exe]
    COMPILE       = xpp
    COMPILE_FLAGS = /ga /wi /wu /q /w
    DEBUG_SAVE    = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    =
    RC_COMPILE    = arc
    RC_FLAGS      = /v
    OBJ_DIR       = obj\
    PRE_BUILD=del obj\*.obj
    PRE_BUILD=del y:\video9\programm\shdstammdaten.exe
// $START-AUTODEPEND
    SHDSTAMMDATEN.RES
    SHDSTAMMDATEN.CH
    ankaufparametervt.obj
    bankenvt.obj
    buchungskontovt.obj
    bundesland.obj
    ean13vt.obj
    filialenvt.obj
    genrevt.obj
    herstellervt.obj
    interpretvt.obj
    kundenanredenvt.obj
    kundenvt.obj
    para_station.obj
    personalvt.obj
    phngenrekonvert.obj
    phnparaallgemeinvt.obj
    phnprgartenkonvert.obj
    phnsystemvt.obj
    phntrgartenkonvert.obj
    phnvostammabgleich.obj
    plzvt.obj
    shdstammdaten.obj
    staatenvt.obj
    steuersatz.obj
    systemvt.obj
    titelvt.obj
    uwgvt.obj
    verleihpreisevt.obj
    versandartvt.obj
    vovt.obj
    wgvt.obj
    zahlungsartenvt.obj
    zubehoervt.obj
    zustand.obj
// $STOP-AUTODEPEND
    ..\..\..\..\zusaetze_gui\allgemein\classean.obj     <-- das ab hier bis
    ..\..\..\..\zusaetze_gui\allgemein\zusaetze_dll.lib
    ..\..\..\..\zusaetze_gui\sys\appsys_gui_d.obj
    ..\..\..\..\zusaetze_gui\sys\dbesys_d.obj
    ..\..\..\..\zusaetze_gui\sys\errorsys_d.obj
    ..\..\..\shd_gui\zusaetze\classshddb_d.obj
    ..\..\..\shd_gui\zusaetze\shdstruktur.lib
    ..\zusaetze\classvideo.obj
    ..\zusaetze\videostruktur.dll                          <-- hier habe ich von Hand eingetragen. Das gab nie Probleme
    ankaufparametervt.prg
    bankenvt.prg
    buchungskontovt.prg
    bundesland.prg
    ean13vt.prg
    filialenvt.prg
    genrevt.prg
    herstellervt.prg
    interpretvt.prg
    kundenanredenvt.prg
    kundenvt.prg
    para_station.prg
    personalvt.prg
    phngenrekonvert.prg
    phnparaallgemeinvt.prg
    phnprgartenkonvert.prg
    phnsystemvt.prg
    phntrgartenkonvert.prg
    phnvostammabgleich.prg
    plzvt.prg
    shdstammdaten.prg
    staatenvt.prg
    steuersatz.prg
    systemvt.prg
    titelvt.prg
    uwgvt.prg
    verleihpreisevt.prg
    versandartvt.prg
    vovt.prg
    wgvt.prg
    zahlungsartenvt.prg
    zubehoervt.prg
    zustand.prg
Nagut, ich habe einen Teil in einem Texteditor eingegeben. Woher soll VX auch wissen, was noch dazugehört an OBJ Files?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von brandelh »

Hi Manfred,

du verwendest also vorkompilierte Bibliotheken, das ist was anderes - nun ja,
für PBUILD wäre die Syntax richtig, was VX daraus macht habe ich keine Ahnung.

Ich will jetzt wirklich nichts zu vorkompilierten PRG sagen ... also lass ich es ;-) .
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Aufruf eigener DLL

Beitrag von brandelh »

was ist eigentlich ean13vt.prg diese Datei mit dem EAN13 Namen ?
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi Hubert,

das ist was ganz harmloses. Da stehen nur alle EAN-13 (als Nummern) drin, die dem System bisher bekannt sind und die werden dann einem Stamm zugeordnet. Also nichts was Du evtl. vermutest. Es hätte auch Bestellnummern heißen können, weil es auch manchmal noch Hersteller gibt, die keine EAN-13 kaufen, sondern die preiswertere Variante wählen und irgend einem Schmonsens als Bestellnummer schreiben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Aufruf eigener DLL

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben:

Code: Alles auswählen

// $START-AUTODEPEND
    SHDSTAMMDATEN.RES
    SHDSTAMMDATEN.CH
    ankaufparametervt.obj

// $STOP-AUTODEPEND

hm meine XPJ sieht irgendwie anders aus :

Code: Alles auswählen

[WM9DLL.DLL]
    COMPILE_FLAGS = /dll /n /q /w
// $START-AUTODEPEND
    WM9RES.RES
    WM9MENU.OBJ
...
    WM9DLL.DEF         // -> Das DEF File hat die Referencen der DLL
// $STOP-AUTODEPEND
    WM9RES.ARC
    WM9MENU.PRG

[WM9.EXE]
// $START-AUTODEPEND
    WM9.RES
    WM9.OBJ
// $STOP-AUTODEPEND
    WM9.ARC
    WM9DLL.LIB           // das ist die LIB zur DLL 
    WM9.PRG
    DBESYS.PRG
    XPPERROR.PRG
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Re: Aufruf eigener DLL

Beitrag von Manfred »

Hi Jimmy,

frage mich jetzt nicht wie das zustande kommt. Ich meine irgendwie habe ich das 1.Projectfile erzeugen lassen und dann immer wieder nur kopiert und entsprechend modifiziert. Weil es halt klappte.
Wie das jetzt alles WIRKLICH funktioniert.... Da bin ich ganz ehrlich, da habe ich noch keinen echten Durchblick. Da müßte ich noch ein paar Fragen stellen. Wenn ich mal wieder etwas mehr Zeit habe.
Aber, da fällt mir etwas ein...... die XUG OS trifft sich ja im November.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten