dsListLabel

Moderator: Moderatoren

Antworten
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

dsListLabel

Beitrag von Marcus Herz »

Wer es noch nicht kennen sollte:
- Combit liefert ja seit Ver 23 dsListLabel mit aus. Damit ist Echtdatenvorschau aus dem Designer möglich. Hat seit 2017 funktioniert. Bis irgendwann Mitte 2020, spätestetens mit Win 20H2 nicht mehr. Ich bich schier wahnsinnig geworden auf der Suche nach dem Problem:
- Wenn man aus der Echtdatenvorschau zurück in den Designer wechselte, hing die Applikation.
- habe ältere Xbase Version verwendet, Problem blieb
- habe alle LL Versionen seit Ver 23 getestet, Problem blieb
- bis ich drauf kam. auf älteren Win Versionen gab s diese Problem nicht. Dort funktioniert es weiterhin. Man kann nicht davon ausgehen, dass es in Windows einen Fehler gab, vermutlich ist Windows intoleranter gegenüber Speicherverletzung geworden. Und da lag die Vermutung in der Callback Technik mit Struktur Parameter.
In Zusammenarbeit mit Combit und Alaska konnte das Problem immer mehr eingegrenzt werden. Dabei hat mir Andreas ja auch die xpprt2.ch verraten.
Der komplette Callback Ablauf wurde auf Xbase++ umgeschrieben, ot4xb flog raus. Problem blieb aber weiterhin.
Bis ich durch einen puren Zufall den Fehler idenifizieren konnte:
Es gab bisher eine

Code: Alles auswählen

DLLFUNCTION LLDefineLayout...
d Deklaration.
Wurde diese aber mit

Code: Alles auswählen

EXTERN INTEGER LLDefineLayout		
	hLlJob AS INTEGER,;
	hWnd AS UINTEGER,;
	@pszTitle  AS STRING ,;
	nObjType AS UINTEGER,;
	@pszObjName  AS STRING ) ORDINAL 28 IN CMBT_DLL
deklaariert , funktioniert alles wieder. Fehler ist reproduzierbar! Es hing nur indirekt mit dem Callback zusammen. Es Grund mehr, mit EXTERN zu arbeiten. Die Diskussion gabs ja die letzten Tage häufiger.
dsListLabel wird demnächst dann mit DrillDown und aufkappbarer Vorschau zur Verfügung stehen. Lasst euch überraschen
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2162
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 9 Mal
Danksagung erhalten: 28 Mal

Re: dsListLabel

Beitrag von ramses »

Marcus Herz hat geschrieben: Mi, 10. Mär 2021 15:55 - Combit liefert ja seit Ver 23 dsListLabel mit aus.
Hallo Marcus

Leider lässt sich die gar nicht benutzen weil Dateien fehlen und so ein kompilieren mit Fehler endet ......

Du solltest Combit mal ein komplettes Set aller PRG's und CH Dateien liefern .....

Einige der verschiedenen Programmhänger werden durch das kommende SP2 beseitigt, das war jedenfalls bei mir mit der Vorabversion so.

Momentan läuft bei mir alles auch mit LL26 einwandfrei und Wunschgemäss mit Callbacks und mit ot4xb. Die Probleme die ich hatte hat das SP2 beseitigt. Momentan muss ich nichts ändern und lasse deshalb alles so wie es ist und läuft.
Aber doch Danke für den Tip mit EXTERN gut zu Wissen falls dann doch irgendwann evtl. Probleme auftauchen...
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Ja , die Verison 26 ist verunglückt. Wir wollten das neue mitliefern, hatten aber damals schon das Problem mit dem Hänger. Dann hat man kurzfristig die Vers. von 25 wieder ausgeliefert. Hoffe, das klappt nächstes Mal besser
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2162
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 9 Mal
Danksagung erhalten: 28 Mal

Re: dsListLabel

Beitrag von ramses »

Wenn ich zurückdenke gab es aber auch mit der LL22 Version ab und zu Hänger oder die Xbase Meldung: "Datenstruktur zerstört..." im Designer. Nur hat mich das nie so genervt um dem nachzugehen. Mit dem Umstieg auf LL26 sind dann noch anderen Probleme dazugekommen.
Das führte bei Combit anscheinend zu einem Code-Review und einigen Anpassungen fürs Service Pack 2
Damit wurden dann bei mir ohne Codeanpassungen alle Probleme beseitigt. Daher denke ich eher dass die wirkliche Ursache in LL lag und nicht nur in den Aufruffunktionen in Xbase. Denn ausser im Designer gab es ja nie wirklich solche Probleme "Hänger" mit den DLLCalls von XB oder denen von ot4xb mit all den vielen verschiedenen Zusatz DLL's die ich verwende ......

Für bestimmte Probleme gibt es eh nur den Umstieg auf 64 Bit (Aussage Combit) oder das verkleineren des Projekts.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Servus Marcus,

dumme Frage: Wo finde ich die

Code: Alles auswählen

DLLFUNCTION LLDefineLayout
damit wir das durch EXTERN ersetzen und unseren Kunden ein Update schicken können? Habs im Ordner DLL (Version 22) nicht gefunden?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Ist in

C:\Program Files (x86)\combit\LL25\Beispiele\Alaska Xbase++\cmbtLL25.prg
Version entsprechend anpassen.

Morgen im Büro kann ich dir den Code dazu senden, hab ich schon umgesetzt
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Danke, aber da hab ich nachgesehen, da gibt's ja nur

Code: Alles auswählen

#command  LL_FUNCTION <FUNC>([<x,...>]) ORDINAL <nOrdinal> =>      ;
FUNCTION <FUNC>([<x>])                                             ;;
  STATIC cTemplate := NIL                                          ;;
  LOCAL xRet                                                       ;;
  IF hDll == 0                                                                                                         ;;
    RETURN(NIL)                                                    ;;
  ENDIF                                                            ;;
  IF cTemplate==NIL                                                ;;
    cTemplate := DllPrepareCall( hDll, DLL_STDCALL, <nOrdinal> ) ;;
  ENDIF                                                            ;;
  xRet := DllExecuteCall(cTemplate[,<x>])                          ;;
RETURN xRet
und dann

Code: Alles auswählen

LL_FUNCTION LlDefineLayout(hLlJob, hWnd, @pszTitle, nObjType, @pszObjName) ORDINAL 28
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Ich hab in der neuen ListLabel Version diesen Code verwendet (Auszug)

Code: Alles auswählen

#define CMBT_DLL   "CMLL26.dll"  // musst du 1x anpassen
#command LL_EXTERN [<xCallConv:CDECL, STDCALL>] [VOID];
  		[<xRetType:SHORT, USHORT, INTEGER, UINTEGER, LONG, INTEGER64, UINTEGER64, SINGLE, DOUBLE, STRING, WSTRING, IDISPATCH>];
  		<FuncName>( [<paramVal1> AS <paramType1> [,<paramValN> AS <paramTypeN>]] );
  		[ORDINAL <nOrdinal>];
  		IN <LibraryName> [NAME <AliasName>] => ;
FUNCTION <FuncName>( <paramVal1>[,<paramValN>] )                   ;;
	STATIC template := NIL                                        ;;
	LOCAL xRet                                                    ;;
	IF hDll == 0                                                     ;;
		RETURN(NIL)                                                    ;;
	ENDIF                                                            ;;
	IF template == NIL                                            ;;
		template:=DllPrepareCall(<(LibraryName)>,Coalesce(__Sys( <xCallConv> ), DLL_STDCALL)+Coalesce(__Sys(<xRetType>),DLL_TYPE_INT32)+DLL_CALLMODE_COPY,Coalesce(<(AliasName)>,<nOrdinal>,<(FuncName)>),__Sys(<paramType1>)[,__Sys(<paramTypeN>)]) ;;
	ENDIF                                                        ;;
	xRet := DllExecuteCall( template,<paramVal1>[,<paramValN>] )  ;;
RETURN xRet


LL_EXTERN INTEGER LlDefineLayout(;                                                                //
		hLlJob AS INTEGER,;                                                                         //
		hWnd AS UINTEGER,;                                                                          //
		@pszTitle  AS STRING ,;                                                                     //
		nObjType AS UINTEGER,;                                                                      //
		@pszObjName  AS STRING ) ORDINAL 28 IN CMBT_DLL                                             //


Alle anderen DEklaratinen kannst du lassen, lediglich dies in die cmbtll22.prg einfügen und das LL_FUNCTION LLDefilneLayout auskommentieren
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Danke Marcus,

aber:

Code: Alles auswählen

#define CMBT_DLL   "CMLL22.dll"  // musst du 1x anpassen

EXTERN INTEGER LLDefineLayout(hLlJob AS INTEGER, hWnd AS UINTEGER,;
        @pszTitle  AS STRING ,;
        nObjType AS UINTEGER,;
        @pszObjName  AS STRING ) IN CMBT_DLL
führt zu
unbekannte Funktion dllPrepareCall in LLDEFINELAYOUT
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Code: Alles auswählen

#include "dll.ch"

// declare once
#define CMBT_DLL   "CMLL26.dll"

STATIC hDll := 0
Die Static Deklaration hat virlleicht gefehlt.-

Code: Alles auswählen

FUNCTION LL26ModuleInit()
  IF hDll == 0
    hDll = DllLoad(CMBT_DLL)
    IF hDll == 0
      // Handle the error case here
      // Runtime error with semantic: Can not find DLL
    ELSE
      nDLLLoadCount++
    ENDIF
  ENDIF
RETURN (hDll # 0)
Ich kanns compilieren
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

hast du den Code auch so übernommen. Mir scheint du hast die Deklaration verändert....

Code: Alles auswählen

LL_EXTERN INTEGER LlDefineLayout(;                                                                //
		hLlJob AS INTEGER,;                                                                         //
		hWnd AS UINTEGER,;                                                                          //
		@pszTitle  AS STRING ,;                                                                     //
		nObjType AS UINTEGER,;                                                                      //
		@pszObjName  AS STRING ) ORDINAL 28 IN CMBT_DLL                                             //
Habe extra ein neues #command dazu erstellt. Weil der Standard in dll.ch nicht alles abdeckt
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Servus Marcus,

irgendwie kapier ich was nicht #-o
Klar funktioniert Dein Code so, wie Du es gepostet hast. Dann bleibt aber der Hänger bei der Live-Vorschau. Deshalb hab ich zum testen

Code: Alles auswählen

#command LL_EXTERN
und

Code: Alles auswählen

LL_EXTERN INTEGER LlDefineLayout 
rausgenommen und durch

Code: Alles auswählen

EXTERN INTEGER LLDefineLayout 
ersetzt.

Die static-Declaration steht weiter oben in cmbtll22.prg. Das #command ersetzt ja LL_EXTERN "nur" durch eine Funktion mit Aufruf von DLLPrepareCall und DllExecuteCall.

Wie muss der Code aussehen, damit die Hänger in der Live-Vorschau weg sind?

Danke!
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

genau so wie ich gepostet habe. Für die Live Vorschau brauchst du doch auch die CallBack Funktion mit Structure Pointer, Hast du das auch so belassen?
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Schick mir eine PN mit deiner Mail Adresse. Ich geb dir dann den aktuellen Stand. Ist zwar beta, aber stabil, und für 26. Aber für 22 muss ja nur ein Compile FLag gesetzt werden.

Ich habs heute nochmal mit dem letzten Alaska gestestet. keine Fehler. Mir scheint, das die neue Struktur Technik auch einen Tick schneller ist.
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Marcus Herz hat geschrieben: Mi, 28. Apr 2021 16:58 genau so wie ich gepostet habe. Für die Live Vorschau brauchst du doch auch die CallBack Funktion mit Structure Pointer, Hast du das auch so belassen?
Hab nur das in der cmbtll22.prg geändert, was ich gepostet habe.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1864
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 10 Mal
Danksagung erhalten: 21 Mal

Re: dsListLabel

Beitrag von Werner_Bayern »

Servus Marcus,

vielen Dank für Deine prompte Hilfe, alles läuft jetzt ohne ot4xb und sogar deutlich schneller!
Gute Arbeit! =D>

Gute Arbeit auch von Alaska mit dem Extern-Command und der Struktur-Möglichkeit! =D>
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2162
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 9 Mal
Danksagung erhalten: 28 Mal

Re: dsListLabel

Beitrag von ramses »

Hallo Marcus

darf ich auch testen?
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 359
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: dsListLabel

Beitrag von Marcus Herz »

Ich werde ein minimales Setup vorbereiten und zur Verfügung stellen. Ich werd es hier bakannt geben
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Antworten