UserLibrary
LIB
Hallo,
Ich hätte da auch eine Frage.
Ich habe eine LIB, geschrieben in ASM.
Den Quellcode habe ich nicht, da die
LIB nicht von mir ist. Jetzt gibt es da ja
den LibImporter (von Freak ?). Da die
Funktionen in dieser LIB ja keinen PB_
enthalten, wollte ich diese mit besagtem
LibImporter konvertieren. Da kommen
beim Testen der neuen LIB halt die Fehler,
daß die Symbole nicht aufgelöst werden
können ( _Funktion). Der LibImporter ist
wahrscheinlich nur auf C - Funktionen
zugeschnitten.
Wie könnte man den Quellcode, der ja beim
LibImporter beiliegt so verändern, daß man
auch ASM - Libs konvertieren könnte.
Wenn das ginge, könnte ich mir ja 2 Radiobuttons
einbauen, je nachdem, ob es eine C-LIB oder
ASM-LIB ist.
Eine Speicherung der eingetragenen Funktionen
habe ich mir schon selbst mit 2 Buttons gemacht.
Ich hätte da auch eine Frage.
Ich habe eine LIB, geschrieben in ASM.
Den Quellcode habe ich nicht, da die
LIB nicht von mir ist. Jetzt gibt es da ja
den LibImporter (von Freak ?). Da die
Funktionen in dieser LIB ja keinen PB_
enthalten, wollte ich diese mit besagtem
LibImporter konvertieren. Da kommen
beim Testen der neuen LIB halt die Fehler,
daß die Symbole nicht aufgelöst werden
können ( _Funktion). Der LibImporter ist
wahrscheinlich nur auf C - Funktionen
zugeschnitten.
Wie könnte man den Quellcode, der ja beim
LibImporter beiliegt so verändern, daß man
auch ASM - Libs konvertieren könnte.
Wenn das ginge, könnte ich mir ja 2 Radiobuttons
einbauen, je nachdem, ob es eine C-LIB oder
ASM-LIB ist.
Eine Speicherung der eingetragenen Funktionen
habe ich mir schon selbst mit 2 Buttons gemacht.
Zuletzt geändert von H.Brill am 25.05.2005 19:05, insgesamt 1-mal geändert.
Ich geb mal ein Beispiel:für was brauchst du konstanten in einer UserLibary?
[Edit]Also nicht das man es falsch versteht aber normal braucht man doch nur Konstanten in einer Procedure oder?[/Edit]
(...)
Uns für was?
(C & C++ & WinAPI Code)
Code: Alles auswählen
void ctrl_window::add_scrollbar(int typ, int min, int max, int pos)
{
if (typ == SB_VERT) //Vertical Scrollbar
{
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_VSCROLL); //Create Scrollbar
scrollinfo_VERT.cbSize = sizeof(SCROLLINFO); //Fill Structure with informations
scrollinfo_VERT.fMask = SIF_ALL;
scrollinfo_VERT.nMin = min;
scrollinfo_VERT.nMax = max;
scrollinfo_VERT.nPage = 1; //Size of Thumbbox
scrollinfo_VERT.nPos = pos;
SetWindowPos(hwnd, HWND_TOP, NULL, NULL, NULL, NULL, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
SetScrollInfo(hwnd, SB_VERT, &scrollinfo_VERT, true);
}
else //Horizontal Scrollbar
{
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_HSCROLL); //Create Scrollbar
scrollinfo_HORZ.cbSize = sizeof(SCROLLINFO); //Fill Structure with informations
scrollinfo_HORZ.fMask = SIF_ALL;
scrollinfo_HORZ.nMin = min;
scrollinfo_HORZ.nMax = max;
scrollinfo_HORZ.nPage = 1; //Size of Thumbbox
scrollinfo_HORZ.nPos = pos;
SetWindowPos(hwnd, HWND_TOP, NULL, NULL, NULL, NULL, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
SetScrollInfo(hwnd, SB_HORZ, &scrollinfo_HORZ, true);
}
}
Je nachdem was als "int typ" angegeben wird, wird eine horizontale oder vertikale Scrollbar erstellt. Und wenn man das in eine Userlib packt, wär es gut, die Konstante mitzuliefern. Ansonsten muss man ja mit den Werten hantieren, die ich aber so nicht kenne. Leichter zu merken ist der Name als der Wert.

Allein die WinAPI nutzt fast überall ( und dann massig) Konstanten. Die sind also überall in Gebrauch. Da ist es schon nicht schlecht, die Konstanten direkt der Userlib mitgeben zu können.
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
Re: LIB
hä? wie geht denn das?Ich habe eine LIB, geschrieben in ASM.
Den Quellcode habe ich nicht, da die
LIB nicht von mir ist.
du hast ne lib geschrieben, die nicht von dir ist?

ich denke du hast was anderes gemeint, ich ziehe halt leute gerne ein wenig auf

-.-"
Re: LIB
Das hat er nicht gesagt. Lerne doch bitte erst einmalGreen Snake hat geschrieben:hä? wie geht denn das?
du hast ne lib geschrieben, die nicht von dir ist?
Kommata richtig zu interpretieren.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- Green Snake
- Beiträge: 1394
- Registriert: 22.02.2005 19:08
Re: LIB
Sorry, habe Deine Frage jetzt erst gesehen (durch denH.Brill hat geschrieben:Ich habe eine LIB, geschrieben in ASM.
Den Quellcode habe ich nicht, da die
LIB nicht von mir ist. Jetzt gibt es da ja
den LibImporter (von Freak ?). Da die
Funktionen in dieser LIB ja keinen PB_
enthalten, wollte ich diese mit besagtem
LibImporter konvertieren. Da kommen
beim Testen der neuen LIB halt die Fehler,
daß die Symbole nicht aufgelöst werden
können ( _Funktion). Der LibImporter ist
wahrscheinlich nur auf C - Funktionen
zugeschnitten.
Wie könnte man den Quellcode, der ja beim
LibImporter beiliegt so verändern, daß man
auch ASM - Libs konvertieren könnte.
Kommentar von Green Snake).
Schau mal im LibImporter die Zeile 209 an:
Code: Alles auswählen
WriteStringN(" JMP _"+Name$+Size$)
'_Name@ArgumentenZahlInBytes'
Wenn Du diese Zeile änderst in:
Code: Alles auswählen
WriteStringN(" JMP "+Name$)
reines ASM-Label ohne Name Decoration.
In Zeile 194 mußt Du das auch ändern, also "_" und "+Size$"
entfernen:
Code: Alles auswählen
WriteStringN("extrn "+Name$)
Calling Convention stdcall geschrieben wurden.
Sollte eigentlich meistens der Fall sein. Wenn nicht ist
noch etwas mehr Arbeit nötig - aber dann muß man
genau die verwendete Richtlinie kennen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
[OFFTOPIC]
Das wichtigste daran ist der Ausdruck:
((typ == SB_VERT) ? WS_VSCROLL : WS_HSCROLL)
Wenn (typ == SB_VERT) true ist, dann wird WS_VSCROLL
genommen, ansonsten WS_HSCROLL.
Aber das nur mal nebenbei...
[/OFFTOPIC]
Das geht auch kürzer, da 98% der 2 Codeteile gleich sind:Sunny hat geschrieben:Ich geb mal ein Beispiel:
(C & C++ & WinAPI Code)Code: Alles auswählen
void ctrl_window::add_scrollbar(int typ, int min, int max, int pos) { if (typ == SB_VERT) //Vertical Scrollbar { SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_VSCROLL); //Create Scrollbar scrollinfo_VERT.cbSize = sizeof(SCROLLINFO); //Fill Structure with informations scrollinfo_VERT.fMask = SIF_ALL; scrollinfo_VERT.nMin = min; scrollinfo_VERT.nMax = max; scrollinfo_VERT.nPage = 1; //Size of Thumbbox scrollinfo_VERT.nPos = pos; SetWindowPos(hwnd, HWND_TOP, NULL, NULL, NULL, NULL, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); SetScrollInfo(hwnd, SB_VERT, &scrollinfo_VERT, true); } else //Horizontal Scrollbar { SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_HSCROLL); //Create Scrollbar scrollinfo_HORZ.cbSize = sizeof(SCROLLINFO); //Fill Structure with informations scrollinfo_HORZ.fMask = SIF_ALL; scrollinfo_HORZ.nMin = min; scrollinfo_HORZ.nMax = max; scrollinfo_HORZ.nPage = 1; //Size of Thumbbox scrollinfo_HORZ.nPos = pos; SetWindowPos(hwnd, HWND_TOP, NULL, NULL, NULL, NULL, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); SetScrollInfo(hwnd, SB_HORZ, &scrollinfo_HORZ, true); } }
Code: Alles auswählen
void ctrl_window::add_scrollbar(int typ, int min, int max, int pos)
{
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | ((typ == SB_VERT) ? WS_VSCROLL : WS_HSCROLL)); //Create Scrollbar
scrollinfo.cbSize = sizeof(SCROLLINFO); //Fill Structure with informations
scrollinfo.fMask = SIF_ALL;
scrollinfo.nMin = min;
scrollinfo.nMax = max;
scrollinfo.nPage = 1; //Size of Thumbbox
scrollinfo.nPos = pos;
SetWindowPos(hwnd, HWND_TOP, NULL, NULL, NULL, NULL, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
SetScrollInfo(hwnd, typ, &scrollinfo, true);
}
((typ == SB_VERT) ? WS_VSCROLL : WS_HSCROLL)
Wenn (typ == SB_VERT) true ist, dann wird WS_VSCROLL
genommen, ansonsten WS_HSCROLL.
Aber das nur mal nebenbei...

[/OFFTOPIC]
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
LIB
Hallo,
Danke Danilo,
Das hatte ich genau gemeint. Werde es
dann mal umändern und testen.
PS: Ursprünglich ist das eine DLL (Shareware).
Ich hatte den Autor nach einer LIB gefragt, weil
ich dann die DLL nicht rumschleppen muß. Der
hatte mir dann die LIB geschickt. Die fällt sowie
an, wenn er die DLL mit dem MASM neu übersetzt.
(laut seiner Aussage).
Danke Danilo,
Das hatte ich genau gemeint. Werde es
dann mal umändern und testen.
PS: Ursprünglich ist das eine DLL (Shareware).
Ich hatte den Autor nach einer LIB gefragt, weil
ich dann die DLL nicht rumschleppen muß. Der
hatte mir dann die LIB geschickt. Die fällt sowie
an, wenn er die DLL mit dem MASM neu übersetzt.
(laut seiner Aussage).
LIB
Die Funktionen werden schon mal richtig
gestrippt. Bekomme aber immer noch die
Fehler
POLINK error: Unresolved external Symbol '...'
Denke mal, daß es keine richtige statische LIB
ist, sondern sowas ähnliches was VC++ (glaube ich)
produziert oder was das LibTool ausgibt.
Habe auch mal mit einem Texteditor reingeschaut.
Der Anfang
!<arch>
ist ja richtig, aber ich habe auch Referenzen zu seiner
DLL drin gesehen. Da muß ich ihn am Montag erst
fragen, was der MASM da ausgibt, bzw. ob er den
Output anders einstellen kann.
gestrippt. Bekomme aber immer noch die
Fehler
POLINK error: Unresolved external Symbol '...'
Denke mal, daß es keine richtige statische LIB
ist, sondern sowas ähnliches was VC++ (glaube ich)
produziert oder was das LibTool ausgibt.
Habe auch mal mit einem Texteditor reingeschaut.
Der Anfang
!<arch>
ist ja richtig, aber ich habe auch Referenzen zu seiner
DLL drin gesehen. Da muß ich ihn am Montag erst
fragen, was der MASM da ausgibt, bzw. ob er den
Output anders einstellen kann.