Hallo ich wollte QLibrary benutzte, damit ich die CT Lib nicht linken muss. Das hat den Zweck das man das Programm nicht für jeden Kartenleser neu compiliert werden muss. Hat jemand eine Idee wie man das ansetzen muss?
Die 3 Funktionen aus der Lib sehen so aus:
/* needed for dynamic loading ... */
static BOOL ( WINAPI * qtSLWA ) (
HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags ) = NULL;
/* see SIM-Icq -> plugins -> transparent for original source */
void QWidget::setWindowOpacity( double opacity )
{
/* imho this only works for toplevel / getMainWindow() */
if ( !isTopLevel() )
return ;
/* This is only supported on w2k and higher - so load it on runtime */
if ( !qtSLWA )
( DWORD& ) qtSLWA = ( DWORD ) QLibrary::resolve( "user32.dll", "SetLayeredWindowAttributes" );
/* not found -> win9x ? */
if ( !qtSLWA )
return ;
....
(*qtSLWA)(winId(), 0, (int)(opacity * 255), LWA_ALPHA);
....
}
Aber warum willst Du das überhaupt so machen? Ist es eine optionale Bibliothek? Wenn nicht finde ich sollte man sie beim Linken mit angeben - das ist wesentlich weniger Arbeit und man wird beim Programmstart darauf hingewiesen dass diese Dll fehlt...
Das ist die Treiber lib für den Kartenleser die ist zwar genormt. Von den Funktionen her. Aber jeder Leser hat natürlich einen andere lib. Nur die Aufrufe sind gleich. Im Moment muss ich das Programm für jeden Leser neu übersetzen:(
In deinem Beispiel braucht die Funktion qtSLWA die Parameter HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags und liefert bool zurück? Oder nicht?
Ok, dann ist das dynamische Laden zur Laufzeit natürlich gut.
Man sollte am Ende nicht vergessen die Dll/Lib mit QLibrary::unload() wieder freizugeben.
Unloads the library and returns true if the library could be unloaded; otherwise returns false.
This happens automatically on application termination, so you shouldn't normally need to call this function.
Ja es klappt prima. Unter Linux:) (Da dort der Name de Lib immer gleich ist:)) Nur unter Windows heist die Datei bei jedem Leser anders. Mal schauen, ob man in der Registry was findet:) Denn das würde es dem Nutzer unter Windows wesentlich leichter machen. Denn wer weis schon wie die Lib heist:(