Delphi + dll + prioritás
2003-02-03T13:29:53+01:00
2003-02-27T18:20:08+01:00
2022-07-19T06:48:25+02:00
  • Az kevés, hogy ő írja. Ettől még a hibalehetőség fennáll, ti. egyszerűen nem garantálható, hogy a fordító ugyanazt a belső tárgykódot fordítja mindkét modul esetén, hogy a modulok mindig csak egyszerre cserélődnek, stb.

    A súlyos a dologban az, hogy típus- és verzióegyeztetés hiányában a hiba csak közvetve bukhat ki, ameddigre már súlyos adatsérülések is történhetnek.
    Mutasd a teljes hozzászólást!
  • Kösz a helyreigazítást, a nem lehet helyet nem szoktak. Abbol indultam ki, hogy a DLL-t is ö irja.
    Mutasd a teljes hozzászólást!
  • Hát, ez így nem igaz. Annak a szerencsétlen pointernek tök mindegy, hogy típus nélküliként vagy típusos referenciaként utazik (azaz ahol pointert adsz át, ott nyugodtan átadhatsz objektum-referenciát is).

    A másik oldalon viszont objektum-referenciákat egyáltalán nem szabad különböző modulok (pl. DLL és alkalmazás) között passzolgatni (függetlenül attól, hogy mivé castolod esetleg), mert az implementációk egyezése a két oldalon nem garantálható, és ez jobb esetben működésképtelenséghez, rosszabb esetben hibás működéshez vezethet. (A problémát az jelenti, hogy az alkalmazás és a DLL kódja akár tök különböző forrásból is készülhet, hiszen egymástól függetlenül másolhatók, fordíthatók, viszont a különböző kódok nyilvánvalóan nem fognak tudni egy közös objektumot kezelni a nélkü, hogy bele ne piszkítsanak egymás munkájába.)

    Az objektumok innen-onnan manipulálgatása helyett szépen eljárásokat kell csinálni, amikben csak elemi típusokat szabad átadni (pl. integer, cardinal, word, pointer, PChar, boolean, stb.), vagy magasabb szintű típusinformációkat is megőrző interfészeken keresztül (pl. COM) kell kommunikálni.
    Mutasd a teljes hozzászólást!
  • Üdv,

    Azért szált el hibával mert objektumot nem lehet a függvényben közvetlenül átadni egy dll-böl exportált függvénynek. Ne objektumot adj át hanem csak egy pointer-t.

    function fgv(a : integer;var b: Pointer ) : string;external 'new.dll';


    és a new.dll-ben

    function fgv(a : integer;var b: Pointer ): string; var obj: TObject; begin obj:= TObject( b ); .... end;
    Mutasd a teljes hozzászólást!
  • Ezt kipróbáltam én is, de nekem nem műkszik. érvénytelen mutató hibával leáll.
    Mutasd a teljes hozzászólást!
  • function fgv(a : integer;var b : TObject) : string;external 'new.dll';

    A megoldás ez lenne, illetve az external előtt előfordulhat egy stdcall vagy enek valamelyik párja. Ez azért fontos mert a paramétereket jobbról balra vagy fordítva teszi a verembe.
    Mutasd a teljes hozzászólást!
  • Szasztok!
    Delphiben szeretnék használni egy DLL-ben szereplő függvényt, de a Delphi helpben leírtak alapján nem műkszik a dolog. Ha valaki tudna segíteni a következő példa alapján az jó volna!

    Legyen a DLL neve: new.dll
    A függvény neve és deklarációja:
    function fgv(a : integer;var b : TObject) : string
    Ezt a függvényt hogyan tudnám használni egy proigból?
    Mutasd a teljes hozzászólást!
  • pl. valamelyik C++ fejlesztőkörnyezet súgója.
    Mutasd a teljes hozzászólást!
  • Hi!
    Tud valaki DLL programozásról ajánlani valamiféle irodalmat?
    Mutasd a teljes hozzászólást!
  • A DLL kizárólag egy kód-/adatszeparációs egység, ami az ütemező szintjén praktikusan nem is létezik, ennél fogva nincs is olyanja, hogy "prioritás". Prioritása csakis szálaknak van (a processz prioritása is a benne lévő szálak prioritását befolyásolja, az ún. bázisprioritás befolyásolásával), ergo csakis azokét lehet állítani is.
    Mutasd a teljes hozzászólást!
  • Sziasztok!
    Segítségre lenne szükségem.
    Van egy alkalmazás, egy exe-ből és sok dll-ből áll. Hogyan lehet megcsinálni azt, hogy az egyik dll-t magasabb prioritásra hozom, miközben maga az alkalmazás normál, esetleg alacsonyabb prioritásban van. A dll-t nem a processhez képest, hanem rendszerszinten kellene magasabb prioritásra hozni, hogy az összes futó programmal szemben elsőbbsége legyen. De csak a dll-nek.

    Előre is köszi
    Janzo
    Mutasd a teljes hozzászólást!
abcd