eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingBezpieczne przekazywanie ciągów znakówRe: Bezpieczne przekazywanie ciągów znaków
  • Data: 2010-02-23 18:53:07
    Temat: Re: Bezpieczne przekazywanie ciągów znaków
    Od: "\"Marsjanin\"" <z...@g...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Ja taką współpracę (program <-> DLL) zrealizowałem kiedyś następująco:

    void* Init(...); // wołane raz przy inicjalizacji (rejestracja pluginu)
    __int32 DoSomenthing(void *handle,TCHAR *Bufor,unsigned __int32
    *SizeOfBufor);
    __int32 Free(void *handle); // wołane raz przy zwalnianiu zasobów
    (wyrejestrowanie pluginu)

    Komunikacja z DoSomething wyglądała następująco:
    <CODE>
    unsigned __int32 buforSize = 0;
    __int32 error = DoSomenthing(handle,NULL,&buforSize);
    if (error >= _OK) {
    TCHAR *wynik = new TCHAR[buforSize];
    if (wynik) {
    error = DoSomenthing(handle,wynik,&buforSize);
    if (error >= _OK) {
    // obsługa wyniku
    }
    else AddError(error,TEXT("DoSomenthing(...)"));
    delete[] wynik;
    }
    }
    else AddError(error,TEXT("DoSomenthing(NULL)"));

    </CODE>

    Wewnątrz funkcji DoSomenthing "pracochłonne rzeczy" wykonywałem tylko gdy
    wywołanie było z NULL'em. Wówczas czyściłem wewnętrzne struktury (ukryte pod
    wskaźnikiem "handle") i zapamiętywałem tam bieżące wyniki.
    Wywołanie z podanym wskaźnikiem "wynik" i rozmiarem bufora kopiowało tylko
    dane ze struktur wewnętrznych do bufora użytkownika.
    Problemu z wątkami nie miałem, bo każdy wątek musiał wykonać swoje "Init" i
    "Free".

    Pozdrawiam,
    Piotr

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: