[Delphi]Przesyłanie zmiennych do funkcji w dll

Odpowiedz Nowy wątek
2006-11-09 00:56

Rejestracja: 16 lat temu

Ostatnio: 13 lat temu

0

Witam!

Mam problem, który można streścić , jak mi się wydaje, następująco: wywołuję funkcję z zaprzyjaźnionego dlla wysyłając mu między innymi jednego integera. Kolega Dll odbiera tą liczbę, tyle że zawsze widzi ją jako 2010351658 (Google nie wie, co to za liczba, czyli pewnie nic nie znacząca).

Na mój gust albo mam błąd w wywołaniu/definicji funkcji albo po prostu źle ją odczytuje i tak naprawdę wszystko jest dobrze.

Wygląda to tak:

w dllu:

function szyfruj(tekst,szyfr:shortstring; a:integer):shortstring;
begin
MessageDlg(inttostr(a), mtError, [mbOK], 1);
end;

w głównym programie:

a:=length(imemo.Text);
wynik:=szyfruj(tekst, szyfr, a);

MessageDlg uparcie pokazuje 2010351658 dla dowolnej zawartości imemo.

Wiem, że zasadność działania szyfruj() jest wątpliwa, ale to wersja debugująca. Chodzi mi o wartość a. Wiem też, że niefajnie przesyłać stringi ale na razie chcę przy tym zostać. Używam ShareMem.

Tak przy okazji - ShareMem powinienem wrzucić do dlla i gdzie jeszcze? Do uses w źródle projektu czy unitu? Wrzucam tu i tu na wszelki...

Z góry dzięki za odpowiedź.


Nothing is fool-proof to a sufficiently talented fool!

Pozostało 580 znaków

2006-11-09 01:45

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0
xavier napisał(a)

w dllu:

function szyfruj(tekst,szyfr:shortstring; a:integer):shortstring; stdcall;
begin
MessageDlg(inttostr(a), mtError, [mbOK], 1);
end;

pokaż jeszcze jak masz w głównym programie zadeklarowaną szyfruj

Tak przy okazji - ShareMem powinienem wrzucić do dlla i gdzie jeszcze? Do uses w źródle projektu czy unitu? Wrzucam tu i tu na wszelki...

do dpr - czyli pliku projektu i ważne, żeby był na pierwszym miejscu na liście uses
A jeśli musisz przekazywać shortstringi to zamiast sharemem i borlandmm.dll polecam znakomity zamiennik nie potrzebujący dodatkowej dllki i szybszy od ShareMem FastShareMem


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-11-09 12:42

Rejestracja: 16 lat temu

Ostatnio: 13 lat temu

0

stdcall brakowało w deklaracji w dllu. Teraz wszystko działa, dziękuję pięknie!

Zadanie jest na zaliczenie, więc się nie przejmuję za bardzo prędkością ;-) Ale chętnie się przyjrzę temu fastsharememowi.

Pozdrawiam


Nothing is fool-proof to a sufficiently talented fool!

Pozostało 580 znaków

2006-11-09 14:13

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0
xavier napisał(a)

stdcall brakowało w deklaracji w dllu. Teraz wszystko działa, dziękuję pięknie!

pokaż jeszcze jak masz w głównym programie zadeklarowaną szyfruj bo tam też musi być stdcall bo jak będziesz miał pecha to się wysypie przy prezentacji projektu


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Odpowiedz

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