WebHU - Programozási kérdések és válaszok

Hogyan hívják a COM-objektumok nyers mutatókon keresztüli használatát?

Van egy meglehetősen régi COM-szerű komponensünk, meglehetősen bonyolult interfészekkel. Ezek az interfészek meglehetősen problémásak a marshal számára, ezért nem regisztrálunk semmit a registry-ben, hanem exportálunk egy CreateMainObject() függvényt a komponens DLL-ből, amely lekér egy IMainObject mutatót, és a IMainObject interfésznek rengeteg egyéb funkciója van.

Így a kliens soha nem hívja meg a CoCreateInstance()-t, hanem a LoadLibraryEx()/GetProcAddress()-t, majd meghívja a CreateMainObject() függvényt. Soha nem lehet sorba rendezni, mivel a COM valójában nem lép be a helyszínre – minden műveletet az objektumokon közvetlenül hívó metódusok hajtanak végre. Minden nagyon gyors, de természetesen nem szálbiztos, és nem működik COM+ helyettesítőben.

Van-e kifejezés a COM interfészek ilyen használatára?


Válaszok:


1

A keresett kifejezés "helytelen", mint a "Ez a COM-interfészek helytelen használata".

Miért nem regisztrálja a IUnknown-ből származó ICreateMainObject-t (vagy ha úgy tetszik) a IDispatch-t egy metódussal, a ICreateMainObject::CreateMainObject-vel, majd ezt a módszert használja az objektum példányosítására érvényes COM szemantika segítségével.

16.12.2010
  • Ez egy kicsit durva, nem? Szerintem a COM specifikációban nincs semmi, ami azt mondaná, hogy a COM registry-t kell használni. Nem ír le semmit, ami a COM szemantika megsértésére utalna, amennyire én látom. 21.12.2010
  • @Chris Dickson: Először is, ha a kliens DLL belépési pontokat használ, akkor miért nem csinál egy .h/.lib párt, és használja a DLL-t dinamikus könyvtárként, akkor miért ne adná hozzá a COM-ot? Másodszor, hogyan kell más klienseknek használni az osztályt, mint például a .Net interrop? És végül: hol van felállítva a COM infrastruktúra? Ki hívja ebben a modellben CoInitializeEx-t és CoInitializeSecurity-t? Az objektum STA vagy MTA? Az interfészeket össze kell rendezni a szálak között, vagy nem? Hogyan fedezhetők fel az IMainObject új verziói futás közben? Ez az elrendezés működik SxS-sel? 21.12.2010
  • @Chris Dickson: arról nem is beszélve, hogy már létezik megfelelő regisztráció nélküli COM és aktiválás: msdn.microsoft.com/en-us/library/ms973913.aspx 21.12.2010
  • Egyetértek azzal, hogy vitatható, hogy egyáltalán nem használ COM-ot... de azt feltételeztem, hogy arra gondolt, hogy csak a COM IUnknown AddRef/Release/QI paradigmát használja a dinamikus kapcsolat létrehozására interfész vtáblákon keresztül és az objektum élettartamának szabályozására, ahelyett hogy szorosabb bináris csatolást hozna létre. a la .h/.lib. Úgy tűnik, elfogadta, hogy nem tudja kihasználni a COM-szolgáltatások, például a lakásszál-biztonság/távolítás/biztonsági kontextus terjesztésének előnyeit. Csak nevet keresett a modelljének, és a válaszod kicsit pártfogónak tartottam. 21.12.2010
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..