Reklama
Szukaj zleceń na Getak.pl

Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

Marek Kojder Student Informatyki
Wydziału AEiI na
Politechnice
Śląskiej

Temat: Wstawki asemblerowe w QT

Witam,
piszę projekt na zaliczenie, w którym muszę wykorzystać asemblera.
GUI stworzyłem w QT, funkcję asemblerową napisałem w visual studio 2010 i stworzyłem plik *.dll.
A teraz pytanie: jak połączyć to ze sobą, abym mógł korzystać w qt z tej funkcji?

Z góry uprzejmie dziękuję za pomoc :-).

Pozdrawiam.
15.01.2012, 13:43

Krzysztof Kawa pomysłowy
programista

Temat: Wstawki asemblerowe w QT

Chyba musisz dokładniej opisać co konkretnie chcesz zrobić. Co to znaczy "korzystać z funkcji w Qt"? Qt to klasy i funkcje, korzysta się z nich tak samo jak z klas i funkcji w samym C++.

Jeśli chodzi Ci o załadowanie dll'ki za pomocą Qt i użycie funkcji w niej zawartych to służy do tego klasa QLibrary, będąca obiektowym wrapperem na systemowe LoadLibrary() i GetProcAddress(). Działa to mniej więcej tak:
typedef void (*MyAsmFunction)();
QLibrary lib("myAsmLibrary.dll");
MyAsmFunction func = (MyAsmFunction)lib.resolve("myAsmFunctionName");
if(func) func();
15.01.2012, 16:16

Marek Kojder Student Informatyki
Wydziału AEiI na
Politechnice
Śląskiej

Temat: Wstawki asemblerowe w QT

Dziękuję za zainteresowanie :-).
Miałem na myśli dokładnie to co napisałeś. Sprawdziłem podany przez Ciebie kod i niestety mi nie działa.
Sprawdziłem czy program widzi moją bibliotekę dll. Metoda:
QLibrary::isLibrary("moja.dll"); 
zwraca true, jednak gdy wywołuję
(MyAsmFunction)lib.resolve("nazwaFunkcjiwDLL");
zwraca mi false.
Nie mam pojęcia gdzie robię błąd.

Tak wygląda ten fragment kodu w moim programie:
typedef void (*ZmienJasnosc)(int**, int, int, int);
QLibrary lib("zmienjasnosc.dll");
ZmienJasnosc zmien = (ZmienJasnosc)lib.resolve("zmien_jasnosc");
if(zmien) zmien(tmp->tabRed, tmp->X, tmp->Y, proc);
else QMessageBox::information(this, trUtf8("Blad"), trUtf8("Nie mozna zaladowac biblioteki"), "OK");

Za wszelkie sugestie z góry dziękuję :-).Marek Kojder edytował(a) ten post dnia 15.01.12 o godzinie 23:09
15.01.2012, 23:09

Krzysztof Kawa pomysłowy
programista

Temat: Wstawki asemblerowe w QT

Jesli sama biblioteka ładuje się poprawnie ,a le nie możesz uzyskać wskaźnika do funkcji to sprawdziłbym najpierw czy dll'ka jest utworzona poprawnie, tzn. czy funkcje w niej zawarte są poprawnie wyeksportowane.
Możesz sie do tego posłużyć np. dependency walkerem. Za jego pomocą możesz zobaczyć co i jak jest faktycznie widoczne z dll'ki na zewnątrz.

Pamiętaj też, że funkcja importowana przez QLibrary musi być wyeksportowana jako funkcja C, czyli np. w VS:
extern "C" __declspec(dllexport) void zmien_jasnosc(int**, int, int, int) {...}
16.01.2012, 01:26



Wyślij zaproszenie do