List & Label -API Aufruf

Hinweise zu interessanten Quellen und Projekten

Moderator: Moderatoren

Antworten
Frank
Rookie
Rookie
Beiträge: 2
Registriert: Mo, 24. Apr 2006 13:49

List & Label -API Aufruf

Beitrag von Frank »

Experte für List&Label gesucht

Ich setze seit einiger Zeit List&Label 12 für meine Druckausgaben ein.
Bei einem Formulardruck sollen 2 Kopien aus Schacht 1 und 3 Kopien aus Schacht 2 des Druckers automatisch gedruckt werden.

Leider gibt es keinen einfachen LL-Funktionsaufruf, der diese an sich einfache Sache steueren kann. Die Hotline verwies auf eine umständliche Variante, API-Funktionen aus der CMLS12.DLL zu nutzen: LLStgsysStorageOpen, LLStgsysGetPageCount() und andere Funktionen zur direkten Verwaltung der Previewdatei.

Nur leider lassen diese sich nicht aus Xbase++ nicht aufrufen (Fehlermeldung Unbekannte Funktion DllCallPepare), was auf einen Parameterkonflikt in der DllCallPepare() hindeutet.

Bsp.: Das Öffnen der bereits fertigen Previewdatei sieht (gekürzt) ungefähr so aus:

local sStg:="C:\TMP\TROMLISTE.LL"
local hStg

hStg:=LLStgsysStorageOpen(sStg, "", .t., .t.)
if hStg =0
msgbox("Fehler")
else
msgbox("OK")
endi
...

DLLFUNCTION LLStgsysStorageOpen( cFilename, cTemppath, lReadonly, lOneJobTranslation ) USING STDCALL FROM CMLS12.DLL

Der Ersatz von STDCALL durch die C-Aufrufkonvention CDECL brachte nichts.

Hat jemand eine Idee, wie man die Problemstellung noch lösen könnte bzw. was falsch ist an dem API-Aufruf? Die Datei CMLS12.DLL befindet sich in C:\WINDOWS\SYSTEM32 und enhält wirklich eine Funktion namens
LLStgsysStorageOpen, was im Hex-Editor zu sehen ist.

Danke im Voraus
Frank
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:

Beitrag von brandelh »

Hallo,

mit List&Label kenne ich mich zwar nicht aus, aber das gleiche Ergebnis haben wir aus anderen Programmen dahingehend gelöst, dass wir für den gleichen Drucker 2 Druckobjecte erstellt haben. Im einen Standardpapierschacht und im zweiten den anderen Papierschacht.

Dann müsstest du nur 2 identische aber getrennte Druckjobs erstellen, den einen auf den ersten den anderen auf den zweiten Drucker.
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:

Beitrag von Tom »

Hast Du CMBTLS12.CH eingebunden - und CMBTLS12.PRG? Die enthalten nämlich die Templates für die DLL-Calls. Außerdem muß LS12LoadTemplates aufgerufen werden. Dann steht das Storage-System zur Verfügung. Das ist tatsächlich die bequemste Art, das zu steuern:

- Dokument als Preview speichern, nicht drucken
- 2 Kopien an Drucker/Schacht 1
- 3 Kopien an Drucker/Schacht 2

Das sind insgesamt nur vier oder fünf Zeilen Code.

Edit: DLLFUNCTION ... kannst Du weglassen. Das geschieht alles bei LoadTemplates. Die Funktionen stehen ohne DLL-Wrapping zur Verfügung.
Herzlich,
Tom
Frank
Rookie
Rookie
Beiträge: 2
Registriert: Mo, 24. Apr 2006 13:49

Beitrag von Frank »

Vielen Dank für die schnelle Hilfe. Der Tip mit der CMBTLS12 war echt hilfreich.
Ich hatte nur CMBTLL12 Files eingebunden und deshalb waren die
Templates für alle Stgsys... Funktionen nicht verfügbar.

Viele Grüße
Frank
Antworten