Jak powiązać *.dll z moim programem?

0

Witam.

Chciałbym, aby mój program był bardziej kompatybilny z moim *dll. Napisałem pewien kod i by zobaczyć czy działa dodałem do niego coś takiego:

if result = 1 then
Raise Exception.Create(Format('Incorrect Message found at: %0:.8x', [Int64(Mbi.BaseAddress) + i]));

Działa to jak należy, jednak chciałbym, by mój program był wstanie z tego skorzystać. Chodzi o to jakby, że nie chcę by tylko i wyłącznie pojawiało się okienko z informacją. Chciałbym pójść krok dalej i osiągnąć coś takiego, żeby jakaś wartość w moim programie się zmieniała - coś tego typu: Form1.Label1.Caption := '1'; lub po prostu żeby mój program mógł przetworzyć result z *dll i gdy on wynosi "1" to coś zrobić dalej.

Dzięki.

0

if result = 1 then Form1.Label1.Caption := '1';

2

@DroniC:

Bosch ... jakim cudem się ty wziąłeś przy tych DLL, toż nie tylko nie umiesz podstawowego kodu napisać, ale i otwartym językiem opisać jego specyfikacji.

Bardziej użyteczne będzie zacząć od początku, a nie od końca, wtedy się coś nauczysz...

4

@ZrobieDobrze: ogarnij no się i nie naśmiewaj się z kogoś, tylko dlatego, że czegoś nie wie. Jeśli masz jedynie nabijać się bądź stękać, zamiast udzielać sensownych rad, to lepiej odpuść sobie pisanie postów.

DroniC napisał(a):

Chodzi o to jakby, że nie chcę by tylko i wyłącznie pojawiało się okienko z informacją. Chciałbym pójść krok dalej i osiągnąć coś takiego, żeby jakaś wartość w moim programie się zmieniała - coś tego typu: Form1.Label1.Caption := '1'; lub po prostu żeby mój program mógł przetworzyć result z *dll i gdy on wynosi "1" to coś zrobić dalej.

Aby funkcja z DLL mogła cokolwiek zmienić w danych, które posiadasz po stronie aplikacji, musisz dać jej taką możliwość. Możesz przekazać dane w parametrach funkcji z biblioteki (przekazanie przez referencję, czyli z var/out), możesz też przekazać wskaźniki (zwykłe wskaźniki lub referencje).

Z wyjątkami uważaj, bo mogą sprawiać problemy w połączeniu z DLL. Lepiej po prostu zwracaj z funkcji bibliotecznej wartość logiczną określającą powodzenie wykonania operacji lub liczbowy kod błędu, tak jak robią to np. funkcje z Win32 API. Wyjątki to ogólnie zło, ale taka jest od dawna moda — co zrobić.

0

No właśnie jak działałem z wątkami to wystarczyło wpisać "unit1" do uses i to ze Sobą współgrało. Z DLL jest zupełnie inaczej i dlatego właśnie nie działa mi to: if result = 1 then Form1.Label1.Caption := '1'

2

Mówiąc szczerze mało wiemy o tym co już masz zrobione i trudno np. mi osobiście cokolwiek Ci poradzić.
Nie wiem czy już jakąś dll napisałeś czy po prostu chcesz sprawdzić te "dll" i dopiero zaczynasz.

Ale jak zawsze najlepiej zacząć od początku - czyli teorii.
Jest fajny materiał na tym forum - przeczytaj :)

Rozdział 10

3
DroniC napisał(a):

No właśnie jak działałem z wątkami to wystarczyło wpisać "unit1" do uses i to ze Sobą współgrało. Z DLL jest zupełnie inaczej i dlatego właśnie nie działa mi to: if result = 1 then Form1.Label1.Caption := '1'

Biblioteka DLL jest osobnym bytem, niepowiązanym z żadną aplikacją. Jej kod nie może być przystosowany do konkretnego programu, bo one z założenia mają być niezależne zarówno od języka programu-klienta, jak i od jego specyfiki. To co znajduje się w DLL, ma być uniwersalne, możliwe do użycia w połączeniu z dowolnym programem.

Jeśli Twoja biblioteka nie jest przeznaczona do użytku z dowolnymi językami programowania i dowolnymi programami, to jej po prostu nie używaj, a wymaganą logikę pisz bezpośrednio w kodzie projektu aplikacji. Czyli po prostu nie używaj czegoś, czego nie potrzebujesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1