Seite 2 von 2
LIB
Verfasst: 25.05.2005 18:35
von H.Brill
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.
Verfasst: 25.05.2005 19:04
von Ynnus
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?
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);
}
}
Hierbei kann eine Scrollbar zu einem Fenster hinzugefügt werden. Da man aber Scrollbars Vertikal und Horizontal vergeben kann, bräuchte ich entweder 2 Funktionen oder eine Variable die den Typ der gewünschten Variable angibt. Und da kann man Konstanten nehmen. Hier greif ich zwar jetzt auf die, von Windows vordefinierte, SB_HORZ und SB_VERT zurück, aber man könnte auch eigene Konstanten verwenden.
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.
Re: LIB
Verfasst: 28.05.2005 18:48
von Green Snake
Ich habe eine LIB, geschrieben in ASM.
Den Quellcode habe ich nicht, da die
LIB nicht von mir ist.
hä? wie geht denn das?
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
Verfasst: 28.05.2005 18:55
von Danilo
Green Snake hat geschrieben:hä? wie geht denn das?
du hast ne lib geschrieben, die nicht von dir ist?

Das hat er nicht gesagt. Lerne doch bitte erst einmal
Kommata richtig zu interpretieren.
Verfasst: 28.05.2005 19:04
von Green Snake
so ne sch****e
ich habe das komma überlesen
tut mir sehr leid H.Brill
*ich sollte mir wohl mal ne brille zulegen

*
sorry
Re: LIB
Verfasst: 28.05.2005 19:14
von Danilo
H.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.
Sorry, habe Deine Frage jetzt erst gesehen (durch den
Kommentar von Green Snake).
Schau mal im LibImporter die Zeile 209 an:
Das importieriert __stdcall-Funktionen in der Form:
'_Name@ArgumentenZahlInBytes'
Wenn Du diese Zeile änderst in:
springt es die Funktion ohne '_' und '@Zahl' an, also ein
reines ASM-Label ohne Name Decoration.
In Zeile 194 mußt Du das auch ändern, also "_" und "+Size$"
entfernen:
Funktioniert aber nur wenn die ASM-Funktionen für die
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.
Verfasst: 28.05.2005 19:29
von Danilo
[OFFTOPIC]
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);
}
}
Das geht auch kürzer, da 98% der 2 Codeteile gleich sind:
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);
}
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]
LIB
Verfasst: 28.05.2005 20:23
von H.Brill
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).
LIB
Verfasst: 28.05.2005 20:55
von H.Brill
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.