LIBXL: ohne fpqcall und ot4xb möglich ?

Moderator: Moderatoren

Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von BJelinek »

Hallo zusammen.

Kann man LIBXL auch ohne fpqcall und ot4xb nutzen ?

Kann man EXTERN in der 2.0 verwenden ?
Hat das jemand schon gemacht ?

Über Tipps und Hinweise würde ich mich sehr freuen.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Jan »

Hallo Bernd,

da kann ich nur zu EXTERN was sagen. Nein, nicht auch in 2.0. Sondern nur in 2.0. Das hat Alaska mit irgend einem der Updates dort eingeführt. Ich benutze das, klappt hervorragend.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von BJelinek »

Hallo Jan,
auch mit LIBXL ?

Wenn ja, dann kann ich mich mal an umbauen wagen.

Danke für die Info.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Tom »

Ja, mit EXTERN ist einiges besser geworden, aber wenn man einen Pointer zurückbekommt (wie z.B. von QPDF), muss man doch noch mit ot4xb peeken.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von AUGE_OHR »

hi Bernd,

deine Frage zu Ot4xb bezieht sich ja auf LibXL aber der Zweck war doch ein XLSx Sheed zu erzeugen welches mit Daten aus einer DBF "gefüttert" wurde.

anbei xBase Code mit HMG Syntax was aber leicht mach Xbase++ umzusetzen ist ( z.b. Syntax Progressbar)

ALLES was ActiveX OOP Syntax angeht ist 100% kompatible.
Unterschiede ergeben sich aus UTF8 und Codepage der DBF

der Code kann mit INSERT oder ADO Recordset arbeiten

Code: Alles auswählen

FUNCTION ADOxlsxWrite( ... )

   SET CENTURY ON
   SET DATE GERMAN

   oConnect := CreateObject( "ADODB.Connection" )

   bError := ERRORBLOCK( { | oErr | BREAK( oErr ) } )
   BEGIN SEQUENCE
      oConnect:Execute( "DROP TABLE " + myXlsFile )
   END SEQUENCE
   ERRORBLOCK( bError )

   //  ---------------------- Catalog -------------------------- *

   oCatalog := CreateObject( "ADOX.Catalog" )
   oCatalog:ActiveConnection := 'Provider=Microsoft.ACE.OLEDB.12.0;' + ;
                                'Data Source=' + myXlsFile + ';' + ;
                                'Extended Properties="Excel 12.0 Xml";'

   //  ---------------------- Create Table --------------------- *

   oTable := CreateObject( "ADOX.Table" )
   oTable:Name := "Sheet1"

   ii := 1
   FOR ii := 1 TO iMax
      cField := aStructure[ ii ] [ DBS_NAME ]
      cType := aStructure[ ii ] [ DBS_TYPE ]
      nLen := aStructure[ ii ] [ DBS_LEN ]
      nDec := aStructure[ ii ] [ DBS_DEC ]

      oColumn := CreateObject( "ADOX.Column" )
      oColumn:Name := cField

      DO CASE
         CASE cType = "C"
            oColumn:Type := adVarWChar
            oColumn:DefinedSize := nLen
            oColumn:Attributes := 2                                   // adColNullable
         CASE cType = "M"
            oColumn:Type := adLongVarWChar
            oColumn:Attributes := 2                                   // adColNullable
         CASE cType = "N"
            oColumn:Type := adDouble
            oColumn:DefinedSize := nLen
            oColumn:NumericScale := nDec
         CASE cType = "D"
            oColumn:Type := adDate
         CASE cType = "L"
            oColumn:Type := adBoolean
      ENDCASE

      oTable:Columns:Append( oColumn )
   NEXT

   // add Table to Catalog
   oCatalog:Tables:Append( oTable )

   oConnect:ConnectionString = 'Provider=Microsoft.ACE.OLEDB.12.0;' + ;
           'Data Source=' + myXlsFile + ';' + ;
           'Extended Properties="Excel 12.0 Xml";'

   oConnect:open()

   SetProperty( "ExportDbf", "ProgressBar_1", "Value", 0 )
   DO EVENTS   // harbour

   //  #define Use_INSERT .T.
#ifdef Use_INSERT
   //  ---------------------- INSERT INTO ---------------------- *

   // prepare String for Fields
   cSelect := "( "
   ii := 1
   FOR ii := 1 TO iMax
      cField := aStructure[ ii ] [ DBS_NAME ]
      cSelect += cField
      IF ii < iMax
         cSelect += ", "
      ENDIF
   NEXT
   cSelect += " ) "

   // now start
   nStart := SECONDS()
   GO TOP
   DO WHILE !EOF()
      ii := 1
      cSql := "INSERT INTO [Sheet1] " + cSelect + "VALUES ( "

      FOR ii := 1 TO iMax
         cField := aStructure[ ii ] [ DBS_NAME ]
         cType := aStructure[ ii ] [ DBS_TYPE ]
         nPosi := FIELDPOS( cField )
         xValue := FIELDGET( nPosi )

         DO CASE
            CASE cType = "C"
               xValue := "'" + STRTRAN( xValue, "'", " " ) + "'"
            CASE cType = "M"
               IF LEN( xValue ) > 64
                  xValue := "'Memo'"
               ELSE
                  xValue := "'" + STRTRAN( xValue, "'", " " ) + "'"
               ENDIF
            CASE cType = "D"

               IF EMPTY( xValue )
                  xValue := "0"
               ELSE
                  //  xValue := DTOC( xValue )
                  //  xValue := DTOS( xValue ) + "000001"
                  //  xValue := HB_STOT( DTOS( xValue ) + "000000" )
                  //  xValue := serial2dt(xValue )

                  xValue := STR( dt2serial( xValue ) )
               ENDIF

            CASE cType = "L"
               xValue := IF( xValue = .T., "TRUE", "FALSE" )
            CASE cType = "N"
               xValue := STR( xValue )
         ENDCASE

         cSql += xValue
         IF ii < iMax
            cSql += ","
         ENDIF
      NEXT
      cSql += ")"
      oConnect:Execute( cSql )
      onDummy( TIME(), cSql )

      nRowLine ++
      IF ( nRowLine % nEvery ) = 0
         nProz := CalcPos( nRowLine, nMax )
         IF nProz > 100
            nProz := 100
         ENDIF
         SetProperty( "ExportDbf", "ProgressBar_1", "Value", nProz )
         DO EVENTS
      ENDIF

      SKIP
   ENDDO

#ELSE
   //  ---------------------- ADO Recordset -------------------- *
   //    ALTD()

   objRS := CreateObject( "ADODB.Recordset" )
   objRS:Open( "Select * from [Sheet1]", oConnect, adOpenKeyset, adLockOptimistic )

   // now start
   nStart := SECONDS()
   GO TOP
   DO WHILE !EOF()
      aField := {}
      aValue := {}
      ii := 1
      FOR ii := 1 TO iMax
         cField := aStructure[ ii ] [ DBS_NAME ]
         cType := aStructure[ ii ] [ DBS_TYPE ]
         nPosi := FIELDPOS( cField )
         xValue := FIELDGET( nPosi )

         IF EMPTY( xValue )
            DO CASE
               CASE cType = "C"
                  xValue := " "
               CASE cType = "M"
                  xValue := " "
               CASE cType = "N"
                  xValue := 0.00
               CASE cType = "D"
                  xValue := CTOD( "  .  .  " )
               CASE cType = "L"
                  xValue := .F.
            ENDCASE
         ENDIF

         AADD( aField, cField )
         AADD( aValue, xValue )
      NEXT
      objRS:AddNew( aField, aValue )
      objRS:Update()                                                  // objRS:UpdateBatch()

      nRowLine ++
      IF ( nRowLine % nEvery ) = 0
         nProz := CalcPos( nRowLine, nMax )
         IF nProz > 100
            nProz := 100
         ENDIF

         SetProperty( "ExportDbf", "ProgressBar_1", "Value", nProz )
         DO EVENTS   // harbour
      ENDIF

      SKIP
   ENDDO

   objRS:Close()
   objRS := NIL

#ENDIF

   oConnect:Close()
   oConnect := NIL

   nStop := SECONDS() - nStart
   onDummy( TIME(), "finish after " + LTRIM( STR( nStop ) ) )

   oCatalog := NIL
   oTable := NIL
   oColumn := NIL

   hb_cdpSelect( cOldLang )

   SetCursorWait( "WinLeft", .F. )
   SetCursorWait( "WinRight", .F. )

   DO EVENTS    // harbour
   //    Msginfo( "finish after " + LTRIM( STR( nStop ) ) )

RETURN .T.
wenn Office installiert ist die jeweilige xxxx Version installiueren damit die "selbe" Runtime verwendet wird

Microsoft Access Database Engine xxxx Redistributable
hier link für v2010
https://www.microsoft.com/en-us/downloa ... n&id=13255
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

BJelinek hat geschrieben: Mo, 22. Feb 2021 13:00 Hallo zusammen.

Kann man LIBXL auch ohne fpqcall und ot4xb nutzen ?

Kann man EXTERN in der 2.0 verwenden ?
Hat das jemand schon gemacht ?

Über Tipps und Hinweise würde ich mich sehr freuen.
Ich habe mir die Beschreibung von EXTERN genauer angesehen.

Man kann hier genau angeben, welchen Datentyp man Xbase++ gegenüber zurückgeben möchte, auch z.B. STRING oder DOUBLE Rückgabewerte !
Allerdings aktuell mit einer Ausnahme von BOOL => .t. .f.
Bei LibXL wie bei den meisten mir bekannten, Sprachen gibt es keinen Datentyp logisch, sondern nur LONG, die 0 (falsch) oder ungleich 0 (wahr) sind.
Ein gewöhnlicher Compiler kann also mit der Rückgabe LONG direkt ein IF wahr oder falsch THEN ansteuern.

Meine Idee war nun, wenn wir das noch könnten, müsste es möglich sein eine fast automatische Übersetzung der anderen Beispiele (Basic INC oder C/C++ ) hinzubekommen.
Auf jeden Fall wäre das einfacher als die Wartung meiner Klasse - an der ich aktuell wieder Anpassungen vornehme - und bei der Anwendung würde man die Beispiele direkt nutzen können.

Das ist nun als PDR anerkannt worden und man kann es zwischenzeitlich auch umgehen (eine CH Datei für LibXL sollte möglich sein):

:arrow: https://www.alaska-software.com/scripts ... PDRID=7385
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

Tom hat geschrieben: Mo, 22. Feb 2021 16:20 Ja, mit EXTERN ist einiges besser geworden, aber wenn man einen Pointer zurückbekommt (wie z.B. von QPDF), muss man doch noch mit ot4xb peeken.
hast du das ausprobiert ? Laut Doku sollte der Rückgabewert STRING genügen.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Tom »

brandelh hat geschrieben: Mi, 10. Mär 2021 14:03
Tom hat geschrieben: Mo, 22. Feb 2021 16:20 Ja, mit EXTERN ist einiges besser geworden, aber wenn man einen Pointer zurückbekommt (wie z.B. von QPDF), muss man doch noch mit ot4xb peeken.
hast du das ausprobiert ? Laut Doku sollte der Rückgabewert STRING genügen.
Das habe ich noch nicht ausprobiert, mache ich mal, danke für den Hinweis.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Marcus Herz »

Kann ich nur empfehlen, auf EXTERN umzustellen, Ot4xb ist dazu nicht mehr nötig, 1 Komponente weniger
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

brandelh hat geschrieben: Mi, 10. Mär 2021 14:03 Laut Doku sollte der Rückgabewert STRING genügen.
Genau so ist es. Ein Peek ist nicht mehr erforderlich. Nur noch wie es vorher auch war, das Umwandeln des Zeichensatzes ANSI / OEM.
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von AUGE_OHR »

Marcus Herz hat geschrieben: Mi, 10. Mär 2021 15:57 Kann ich nur empfehlen, auf EXTERN umzustellen, Ot4xb ist dazu nicht mehr nötig, 1 Komponente weniger
kann man unter v2.x jetzt Windows Structure(n) anlegen :?:

klar das geht mit BAP ... aber auch nur 1-Dim ...
ob ein "Umwandlung" und Rückgabe als String die Sache "übersichtlicher" macht ...
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

nicht mit BAP, da war hier vor kurzem ein Beispiel ... es hat sich mit EXTERN viel getan
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von AUGE_OHR »

hi,

ich habe über L&L mit EXTERN und ""xpprt2.ch" gelesen das nun wohl einiges "mehr" mit Xbase++ v2.x möglich ist. =D>
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

Ich habe mir schon oft überlegt ot4xb zu entfernen. Vieles der Funktionen aus ot4xb wäre nun auch mit Xbase möglich.

Leider gibt es in Xbase z.B. keinen Ersatz für die Funktion lCallFuncPA( <cFunktionName>, { para1, para2 .....} )
Damit kann eine zur Runtime vorhandene Xbase Funktion mit Parametern aufgerufen werden.

Sicher könnte man dies mit einem Macro Aufgerufen werden, jedoch benötigt ein solcher Aufruf 40% mehr Ausführungszeit!!

Der Umbau bedeutet aber auch sehr viel Aufwand fürs Umschreiben und Testen nur um eine Komponente einzusparen, macht das wirklich Sinn???
Valar Morghulis

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

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Werner_Bayern »

Code: Alles auswählen

#xtranslate
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: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

Werner_Bayern hat geschrieben: Fr, 19. Mär 2021 17:17

Code: Alles auswählen

#xtranslate
Hallo Werner

Wie soll denn das gehen?
Ein endloses "do case" Konstrukt würde gehen.

Der Aufruf der Funktion ist dynamisch, also der benötigte/gewünschte Funktionsname ist zur Zeit des Kompilierens nicht bekannt jedoch vorhanden. er wird zur Laufzeit als String geliefert.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Marcus Herz »

Wenn es eine xbase DLL ist, dynamisch geladen, kannst du doch h immer ein Template erzeugen; können mit dllloaf. Bin Grad am Handy und kann das nicht prüfen. Geht dann nicht sogar ein makro Aufruf: &(cfunx).()
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Werner_Bayern »

Servus Carlo,

ich hab mir den Syntax von lCallFuncPA( <cFunktionName>, { para1, para2 .....} ) nicht angesehen, aber mittels #xtranslate kannst doch den Aufruf umsetzen?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

Ich frag mich für was man die brauchen sollte, ich kann mich nicht erinnern diese verwendet zu haben.
Aus Xbase++ ruft man doch nur die Funktionen der LibXL.DLL auf.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

Hallo zusammen

Die Funktion lCallFuncPA() ist eine in C geschriebene Funktion in den ot4xb diese kann xbase Funktionen aufrufen die in der EXE drin sind.
Die hat nichts mit der LIBXL zu tun sondern mehr mit dem für und wieder die ot4xb / fpqcall zu ersetzen und den zugehörigen Sorgen und Funktionen die mit Xbase dann nicht gehen.

Sicher kann man einem Macro einen Codeblock generieren und mit eval() ausführen, nur ist dann die Leistung des Programm sehr viel kleiner weil der Umweg übers Makro so viel Zeit wegfrisst dass das Programm wesentlich an Performance verliert.
Vom Konzept her gibt es keine DLL's mit xbase Programmteilen.
Das geht dann auch ein Template oder ein #xtranslate nicht.
Oder sehe ich da etwas nicht????
Valar Morghulis

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

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Werner_Bayern »

Servus Carlo,

ah, ok, ich hab zur Runtime überlesen. Du hast quasi einen Interpreter in Deinem Programm. Da hilft natürlich ein #xtranslate nicht.
Sorry.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von AUGE_OHR »

hi

was Carlo sucht ist ein #translate welche im die Ot4Xb Syntax nach EXTERN von der v2.x bringt

Code: Alles auswählen

   hItem := @USER32:SendMessageA(hTreeView,TVM_INSERTITEM,0,oStruct)
in der v19x mit DllCall

Code: Alles auswählen

   hItem := DllCall("USER32.DLL",DLL_OSAPI,"SendMessageA",hTreeView,TVM_INSERTITEM,0,oStruct)
die bekommt man das mit #translate nach EXTERN "übersetzt" :idea:
gruss by OHR
Jimmy
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

AUGE_OHR hat geschrieben: Sa, 20. Mär 2021 9:36 was Carlo sucht ist ein #translate welche im die Ot4Xb Syntax nach EXTERN von der v2.x bringt
Hallo Jimmy

es gibt leider in Xbase++ keine Möglichkeit auch mit EXTERN nicht um eine Funktion Aufzurufen die sich in der selben EXE befindet.
OT macht diesen Call durch nachschauen in der Funktion/Adresstabelle der zur Laufzeit bekannten Funktionen.
Den C Sourcecode findest du im Sourcecode der ot4xb Tools im File Container.cpp ...
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

Ich verstehe nicht warum es nicht gehen sollte, eine Funktion in der eigenen EXE oder Xbase++ DLL aufzurufen ???

Entweder ich starte die direkt im Quellcode oder über ein Macro :? Was übersehe ich ?

Code: Alles auswählen

1. direkt im Quellcode ...
if ...
   MeineFunktion()
2.
cCode := "MeineFunktion("+...+")"
bCode := &(cCode)
eval(... bCode )

function MeineFunktion(...)
...
return ...

Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von AUGE_OHR »

brandelh hat geschrieben: So, 21. Mär 2021 1:47 Ich verstehe nicht warum es nicht gehen sollte, eine Funktion in der eigenen EXE oder Xbase++ DLL aufzurufen ???
ist LIBXL eine Xbase++ DLL ...
es geht doch um "fremde" DLL in Xbase++ anzusprechen, oder ?
gruss by OHR
Jimmy
Antworten