Deutsch
Forum

Texte aus DLL auslesen

 

Stephan
Sonneborn
Hallo,
in der LEER32.DLL habe ich testweise mit dem ResourceBuilder zwei Strings eingefügt:

einmal in der Sprache Deutsch $0407 bzw. 1031:

und einmal in der Sprache Englisch $0809 bzw. 2057:

Die DLL habe ich über USEDLL eingebunden.
Den Text weise ich so zu:
DE_Text$ = RES("GetStrings", PRGDLL&, 100, $00407)
EN_Text$ = RES("GetStrings", PRGDLL&, 100, $00809)

Aber ich bekomme die Fehlermeldung "String-Ressource nicht gefunden: #100".

Was ist falsch?
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
28.09.2020  
 




Georg
Teles
Guten Tag,

wie sieht die Leer32.DLL mit dem Ressource Hacker aus, etwa so ?



Dann müsstest Du die 100 in Anführungszeichen setzen, also
DE_Text$ = RES("GetStrings", PRGDLL&, "100", $00407)
EN_Text$ = RES("GetStrings", PRGDLL&, "100", $00809)

der 3.te Parameter ist entweder die Nummer des Stringes, beginnend mit 1 oder der Name, also in dem Fall "100"

Ich vermute, du müsstest "100" eingeben oder nur 1 als ersten String in der Ressource, dann sollte es gehen.

Grüße
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

28.09.2020  
 




Stephan
Sonneborn
Ich bearbeite die DLLs eigentlich immer mit dem Resource Builder. Da sieht das
dann so aus:



Wenn ich das Bespiel aus der Hilfe eingebe und dann die so erstellte Leer32.dll mit dem Resource Builder bearbeite, kommt eine Fehlermeldung:



Mit dem ResHacker siehts so aus:



Gebe ich dann "7" als dritten Parameter an, läuft des Programm weiter, liest aber "6" als Wert bzw. Text ein, der so gar nicht in der DLL auftaucht.

Die XProfan-Fehlermeldung ist übrigens auch bei "100" als dritten Parameter dieselbe.

Bisher habe ich immer die komplette DLL (je Sprache eine DLL) ausgetauscht und mit ExtString$() gearbeitet. Da gibt man genau die Nummer in der DLL (also hier die 100) an. Aber leider eben ohne Unterscheidung bei der Sprache.

39 kB
Hochgeladen:28.09.2020
Ladeanzahl29
Herunterladen
16 kB
Hochgeladen:28.09.2020
Ladeanzahl31
Herunterladen
23 kB
Hochgeladen:28.09.2020
Ladeanzahl34
Herunterladen
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
28.09.2020  
 



Hi,

ich glaube da fehlt ein Rautezeichen "#100" -

"Aktualisierte XProfan X4 - Hilfedatei (*.chm)" unter "23 - Ressourcen":



(mal die Hilfedatei durchstöbern, was Roland zwischenzeitlich so alles eingebaut hat...)

 
28.09.2020  
 




Stephan
Sonneborn
Leider hilft ein "#100" auch nicht...

Hier mal der bisherige Quellcode:
'*******************************************************************************************************'
'* Programm: Vokabeltrainer                                                                            *'
''******************************************************************************************************'
'* Version: V0.01                                                                                      *'
'* Stand:   28.09.2020                                                                                 *'
'* Info:    Vokabeltrainer                                                                             *'
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Klassendefinition                                                                                   *'
'*******************************************************************************************************'
CLASS Vokabel = Wort$(21), \
Uebersetzung$(21), \
Genus$(2), \
Casus$(13), \
Numerus$(11), \
Verb1$(21), \
Verb22$(21), \
Verb3$(21), \
Lektion$(13)', \
' Anlegen&, \
' Importieren@, \
' Exportieren@, \
' Vorlesen@
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendeklaration                                                                                *'
'*******************************************************************************************************'
'*- Programm -*'
DECLARE PRGDLL&
DECLARE PrgName$
DECLARE x!, xx!, y!, yy!
'*******************************************************************************************************'
'*- Dialog -*'
DECLARE DlgText&[5,30], DlgText$[5,30]
DECLARE DlgEdit&[5,30]
DECLARE ToolBar&, ToolbarIcons&   , TabControl&[5]
'*******************************************************************************************************'
'*- Vobaln -*'
DECLARE Begriff#
DECLARE String Texte[]
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendimensionierung                                                                            *'
'*******************************************************************************************************'
DIM Begriff#, Vokabel
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Wertzuweisungen                                                                                     *'
'*******************************************************************************************************'
PRGDLL&       = USEDLL("Vokabeln_32.DLL")
'PRGName$      = RES("GetStrings", PRGDLL&, "#100", $00407)
PRGName$      = EXTSTRING$(PRGDLL&, 100)
ToolbarIcons& = 0'Hier später Toolbaricon eintragen
'*******************************************************************************************************'
'*- Skalierung *'
xx! = 1.30
yy! = 1.15
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Prozedurname: MainWindow                                                                            *'
''******************************************************************************************************'
'* Version: V0.01                                                                                      *'
'* Stand:   28.09.2020                                                                                 *'
'* Info:    Baut das Hauptfenster/-dialog auf                                                          *'
'*******************************************************************************************************'

PROC MainWindow

    '*******************************************************************************************************'
    '*- Lokale Parameter -*'
    DECLARE Handle&
    DECLARE Tab&[5]
    DECLARE dx%, dy%
    DECLARE i%
    DECLARE Ende%
    '*******************************************************************************************************'
    '*- Wertzuweisungen -*'
    x!    = 1.00
    y!    = 1.00
    dX%   = 640
    dy%   = 480
    Ende% = 0
    '*******************************************************************************************************'
    '*- Fensteraufbau -*'
    Handle& = CREATE("Dialog", %HWND, PrgName$, 0,0,0,0)
    SETWINDOWPOS Handle& = INT((%MAXX-dx%)/2)*x!,INT((%MAXY-dy%)/2)*y! - dx%*x!, dy%*y!; 0
    Toolbar&       = CREATE("Toolbar", Handle&, ToolbarIcons&, 0, 0, WIDTH(Handle&), 64*y!)
    TabControl&[1] = CREATE("TabCtrl", Handle&, "Vokabel", 5*x!, HEIGHT(Toolbar&) + 5*x!, WIDTH(Handle&) - 2 * 5*x!, HEIGHT(Handle&) - Height(Toolbar&)-2* 5*x!   )
    FOR i%, 2,5,1
    TabControl&[i%] = INSERTTAB(TabControl&[1], i%,"Tab "+ STR$(i%) )
    ENDFOR
    '*******************************************************************************************************'
    '*- Ereignishandler -*'

    WHILENOT Ende%

        WAITINPUT
        Ende%=1

    ENDWHILE

    '*******************************************************************************************************'
    '*- Fenster schließen -*'
    DESTROYWINDOW(Handle&)
    '*******************************************************************************************************'

ENDPROC

'*******************************************************************************************************'
'*******************************************************************************************************'
'* Hauptprogramm                                                                                       *'
''******************************************************************************************************'
CLS
Mainwindow
DISPOSE Begriff#
FREEDLL PRGDLL&
END

und die zugehörige DLL.

8 kB
Hochgeladen:28.09.2020
Ladeanzahl40
Herunterladen
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
28.09.2020  
 




H.Brill
Mach doch alles mit Rolands eingebauten Funktionen.
Declare string Vokabeln[]
cls
var string DE[] = "Erster", "Zweiter", "Dritter"
var string EN[] = "First", "Second", "Third"
/*
res("addstrings", "E:/Vokabeln.dll", "Vokabeln", 1031, DE[])
res("addstrings", "E:/Vokabeln.dll", "Vokabeln", 2057, EN[])
*/
var handle hDLL = UseDLL("E:/Vokabeln.dll")
Vokabeln[] = res("GetStrings", hDLL, "Vokabeln", 1031)

WhileLoop 0, sizeOf(Vokabeln[]) - 1

    Print Vokabeln[&loop]

EndWhile

Print
Vokabeln[] = res("GetStrings", hDLL, "Vokabeln", 2057)

WhileLoop 0, sizeOf(Vokabeln[]) - 1

    Print Vokabeln[&loop]

EndWhile

WaitInput
end

Das Auskommentierte Res("AddStrings",..) würde ich als extra Programm
machen, das später eventuelle Änderungen der Ressource vornimmt.
Oder mach es als extra Programmpunkt.
Dann kannst du jederzeit Vokabeln dazu machen und brauchst keinen
extra Ressourcen-Editor mehr.

Und mit den Move-Funktionen kann man ja auch sehr gut Textdateien,
in denen die neuen Vokabeln stehen, einlesen und über die Listboxliste
in ein Array transferieren. Somit werden Resourcenänderungen sehr
komfortabel.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
28.09.2020  
 




Georg
Teles
Mir fällt auf, dass
PRGName$      = RES("GetStrings", PRGDLL&, "#100", $00407)

ein Array zurückgibt, aber ich bekomme es auch nicht hin, es auszulesen

So funktioniert es, aber ich verstehe nicht warum
Declare PRGNameN$[]'-------------------------------------#
PRGNameN$[] = RES("GetStrings", PRGDLL&, "#7", $00407)'--#
PRGName$ = PRGNameN$[4]'---------------------------------#

ganzer Code
'*******************************************************************************************************'
'* Programm: Vokabeltrainer                                                                            *'
''******************************************************************************************************'
'* Version: V0.01                                                                                      *'
'* Stand:   28.09.2020                                                                                 *'
'* Info:    Vokabeltrainer                                                                             *'
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Klassendefinition                                                                                   *'
'*******************************************************************************************************'
CLASS Vokabel = Wort$(21), \
Uebersetzung$(21), \
Genus$(2), \
Casus$(13), \
Numerus$(11), \
Verb1$(21), \
Verb22$(21), \
Verb3$(21), \
Lektion$(13)', \
' Anlegen&, \
' Importieren@, \
' Exportieren@, \
' Vorlesen@
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendeklaration                                                                                *'
'*******************************************************************************************************'
'*- Programm -*'
DECLARE PRGDLL&
DECLARE PrgName$
DECLARE x!, xx!, y!, yy!
'*******************************************************************************************************'
'*- Dialog -*'
DECLARE DlgText&[5,30], DlgText$[5,30]
DECLARE DlgEdit&[5,30]
DECLARE ToolBar&, ToolbarIcons&   , TabControl&[5]
'*******************************************************************************************************'
'*- Vobaln -*'
DECLARE Begriff#
DECLARE String Texte[]
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendimensionierung                                                                            *'
'*******************************************************************************************************'
DIM Begriff#, Vokabel
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Wertzuweisungen                                                                                     *'
'*******************************************************************************************************'
PRGDLL&       = USEDLL("Vokabeln_32.DLL")
'PRGName$      = RES("GetStrings", PRGDLL&, "#100", $00407)
'PRGName$      = EXTSTRING$(PRGDLL&, 100)
Declare PRGNameN$[]'-------------------------------------#
PRGNameN$[] = RES("GetStrings", PRGDLL&, "#7", $00407)'--#
PRGName$ = PRGNameN$[4]'---------------------------------#
ToolbarIcons& = 0'Hier später Toolbaricon eintragen
'*******************************************************************************************************'
'*- Skalierung *'
xx! = 1.30
yy! = 1.15
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Prozedurname: MainWindow                                                                            *'
''******************************************************************************************************'
'* Version: V0.01                                                                                      *'
'* Stand:   28.09.2020                                                                                 *'
'* Info:    Baut das Hauptfenster/-dialog auf                                                          *'
'*******************************************************************************************************'

PROC MainWindow

    '*******************************************************************************************************'
    '*- Lokale Parameter -*'
    DECLARE Handle&
    DECLARE Tab&[5]
    DECLARE dx%, dy%
    DECLARE i%
    DECLARE Ende%
    '*******************************************************************************************************'
    '*- Wertzuweisungen -*'
    x!    = 1.00
    y!    = 1.00
    dX%   = 640
    dy%   = 480
    Ende% = 0
    '*******************************************************************************************************'
    '*- Fensteraufbau -*'
    Handle& = CREATE("Dialog", %HWND, PrgName$, 0,0,0,0)
    SETWINDOWPOS Handle& = INT((%MAXX-dx%)/2)*x!,INT((%MAXY-dy%)/2)*y! - dx%*x!, dy%*y!; 0
    Toolbar&       = CREATE("Toolbar", Handle&, ToolbarIcons&, 0, 0, WIDTH(Handle&), 64*y!)
    TabControl&[1] = CREATE("TabCtrl", Handle&, "Vokabel", 5*x!, HEIGHT(Toolbar&) + 5*x!, WIDTH(Handle&) - 2 * 5*x!, HEIGHT(Handle&) - Height(Toolbar&)-2* 5*x!   )
    FOR i%, 2,5,1
    TabControl&[i%] = INSERTTAB(TabControl&[1], i%,"Tab "+ STR$(i%) )
    ENDFOR
    '*******************************************************************************************************'
    '*- Ereignishandler -*'

    WHILENOT Ende%

        WAITINPUT
        Ende%=1

    ENDWHILE

    '*******************************************************************************************************'
    '*- Fenster schließen -*'
    DESTROYWINDOW(Handle&)
    '*******************************************************************************************************'

ENDPROC

'*******************************************************************************************************'
'*******************************************************************************************************'
'* Hauptprogramm                                                                                       *'
''******************************************************************************************************'
CLS
Mainwindow
DISPOSE Begriff#
FREEDLL PRGDLL&
END

Ich würde gern eine Erklärung hierfür haben

Grüße

EDIT:
Da der "Deutsche Texte" in Zeile 4 steht s. ResHacker, könnte die Nummer 4 im Array was damit zutun haben ?
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

28.09.2020  
 




Stephan
Sonneborn
H.Brill (28.09.2020)
Mach doch alles mit Rolands eingebauten Funktionen.


Würde ich gerne machen, aber ich möchte gar nicht die Vokabeln in einer DLL sichern, sondern nur die Texte der Programmoberfläche. Eigentlich brauche ich das nicht für ein Vokabelprogramm, da kann die Oberfläche ja ruhig in Deutsch bleiben. Aber ich habe auf der Arbeit ein Programm entwickelt, dass in unterschiedlichen Sprachen läuft. Und da gehe ich immer noch den umständlichen Weg mit den einzelnen DLLs je Sprache und dem Auslesen mittels ExtString$(). Ich wollte einfach mal die neuen Möglichkeiten testen.

Dazu sollte ich aber schon wissen, welchen String ich auslese. Klar, ich könnte jetzt für jeden Text einen Ressourcenbereich (also den 3. Parameter in der RES("GetStrings" - Funktion) festlegen. Aber ich dachte, es geht auch einfacher, z.B. alle Texte auf Fenster 1, alle Texte auf Fenster 2, alle Hilfetexte zu Fenster 1, alle Hilfetexte zu Fenster 2 u.s.w. jeweils in einen Resourcenbereich ablegen. Damit wäre die DLL viel übersichtlicher, insbesondere dann, wenn man die Text-Nummern dann frei festlegen kann, z.B. 100-199 für die Fenstertexte, 200-299 für die zugehörigen Hilfetexte u.s.w.

Ich habe mir dafür in Excel eine Tabelle erstellt: in Spalte A die Nummer, in Spalte B ein Komma, in Spalte C der deutsche Text, in D dann der Englische. In den Spalten E und F wird dann daraus der Eintrag für die DLL generiert: Nummer & Komma & Text in der jeweiligen Sprache. Danach kann ich dann in Excel einfach die ganze Spalte kopieren und im Resource Builder einfügen. Fertig!
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
28.09.2020  
 




Stephan
Sonneborn
Georg Teles (28.09.2020)
Mir fällt auf, dass
PRGName$ = RES("GetStrings", PRGDLL&, "#100", $00407)
ein Array zurückgibt, aber ich bekomme es auch nicht hin, es auszulesen


Georg Teles (28.09.2020)
So funktioniert es, aber ich verstehe nicht warum
Declare PRGNameN$ '-------------------------------------#
PRGNameN$ = RES("GetStrings", PRGDLL&, "#7", $00407) '--#
PRGName$ = PRGNameN$ '---------------------------------#


Ich hatte auch schon einen variablen Array probiert mit "#7" als 3. Parameter. Weil der ResHacker da eben eine 7 schreibt. Warum? Ich weiß es nicht...

Das macht auch nur der ResHacker. Der Resource Builder macht das nicht. Dafür kann der auch nicht mit Texten als 3. Parameter (z.B. dem "MONAT" in Rolands Beispiel) leben.

Georg Teles (28.09.2020)
EDIT:
Da der "Deutsche Texte" in Zeile 4 steht s. ResHacker, könnte die Nummer 4 im Array was damit zutun haben ?


Bei mir erhalte ich als Rückgabewert für den PRGName$ den Wert "8", zumindest wird das als Fenstertitel angezeigt...
Für PRGNameN$ übrigens auch...


126 kB
Hochgeladen:28.09.2020
Ladeanzahl71
Herunterladen
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
28.09.2020  
 




E.T.
Ich nutze für sowas ohne Probleme ExtString$ , z.B. so:
SetText Status&, 0, @ExtString$(Prg_Dll& ,40)
oder
Checker&[22] = @Create("RadioButton",Static_1&[0],@ExtString$(Prg_Dll& ,24),570,305,200,20)

Der Parameter ist dann genau die Zahl, welche z.B. im ResHacker genau vor dem Texteintrag steht.
Im Bsp. weiter oben also 1584 für "Januar" , 1585 für "Februar" usw...
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
28.09.2020  
 




Stephan
Sonneborn
E.T. (28.09.2020)
Ich nutze für sowas ohne Probleme ExtString$ , z.B. so:
SetText Status&, 0, @ExtString$(Prg_Dll& ,40)
oder
Checker&[22] = @Create("RadioButton",Static_1&[0],@ExtString$(Prg_Dll& ,24),570,305,200,20)

Der Parameter ist dann genau die Zahl, welche z.B. im ResHacker genau vor dem Texteintrag steht.
Im Bsp. weiter oben also 1584 für "Januar" , 1585 für "Februar" usw...


So mache ich das normalerweise auch. Aber damit kann man nicht mit unterschiedlichen Sprachen arbeiten. Oder man muss mit unterschiedlichen Nummernkreisen arbeiten, was ich nicht möchte...
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
29.09.2020  
 




E.T.
Versch. Sprachen für die Programmoberfläche packe ich immer in eine "verkappte" .ini-Datei (mit "falscher" Erweiterung).
Pro Sprache eine Datei.
Lässt sich m.M. nach einfacher bearbeiten bzw. erweitern, als wie jedes mal die .dll zu bearbeiten.
 
XProfan 11
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
29.09.2020  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.531 Betrachtungen

Unbenanntvor 0 min.
Member 862464119.05.2024
H.Brill15.09.2022
RudiB.22.04.2021
Alibre22.02.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie