Ki és hogyan kaphat com-objektumot

Kitől és hogyan érhet el COM objektum megszerzését

Lehetséges, hogy ez nem nagyon érdekes ebben a szakaszban, de meg akarom ismételni a szavaimat - a tárgyak kölcsönhatásának filozófiájával kapcsolatos pontos ismeretek, a folyamat különböző szakaszaiban használt eszközök és eszközök ismerete elkerülhetetlen. A COM-ban nincs mód a "mindent újrafordítani", vagy hibakereső futtatását és a program bármely részét megnézni - a szoftvercsomag része lesz "idegen" objektum, amellyel mindkettővel és a sajátjával is kezelheted. És derítse ki, hogy "mi van benne", és nem tud "javítani" valamit, akkor csak az interakciós protokoll pontos betartására kell támaszkodnia.







Ehhez ismerni kell a "DLL megsemmisítése" részleteit. Korábban azt mondták, hogy az operációs rendszer valamilyen szokásos módon a COM-kiszolgálónak nevezett modulra utal, és arra ösztönzi, hogy hivatkozást bocsásson a COM objektumra. A kérdés, amire választ akarok kapni, hogyan?

Ha a technikai részletekhez fordul, akkor valószínűleg hallottad, hogy a DLL nem csak egy kód. A DLL-en belül speciális táblázatok vannak, amelyek leírják a "külső" funkciókat a DLL határainak szempontjából. Az első táblát az importálásnak hívják - ezek a DLL által igényelt funkciók. de amelyeket nem a DLL-ben hajtanak végre. A második tábla neve EXPORT. leírja azokat a funkciókat, amelyeket a DLL-ben hajtanak végre, és az összes bevételt felajánlja.

A Visual Studio kínálatában nagyon hasznos eszköz a bináris fájlok - a dumpbin.exe program - felderítésére. Nem található a könyvtár "\ Program Files \ Microsoft Visual Studio \ VC98 \ Bin", és vezérli a parancssori felület. A program célja, hogy a bináris fájlokban lévő táblázatok tartalmát humán olvasható formában adja le. Arra használjuk, mint alkalmazott szándékosan COM -server találtunk egy korábbi cikkben - a Dao350.dll, ami a gépemen van abban a könyvtárban található „C: \ Program Files \ Common Files \ Microsoft Shared \ DAO”.







Futtassa a dumpbin parancsot a következő paranccsal:

dumpbin.exe / EXPORT C: \ Program Files \ Közös fájlok \ Microsoft megosztott \ DAO \ DAO350.DLL> tttt.txt

A dumpbin kimenetének a tttt.txt fájlra történő átirányítása a kedvesség kedvéért történik. Alapértelmezés szerint a program kimenetre kerül a konzolra, és a kimenetet úgy szeretném elérni, hogy meg lehessen vizsgálni, miután elkészült. Lássuk, mi került bele ebbe a fájlba. És néhány rövidítéssel kaptuk, hogy:

Microsoft (R) COFF bináris fájl dumper verzió 6.00.8447

Dosszió DAO350.DLL fájllal

A szakasz a következő exportot tartalmazza a DAO350.dll esetében

Pontosan ezt akartuk - az EXPORT táblázatot. Ez a DLL csak öt exportált funkciót tartalmaz! Előretekintve azt mondom - mindegyiket kizárólag a COM működéséhez használják. azaz előttünk egy tiszta COM szerver, nem szándékozunk semmit.

És ezen öt funkció közül jelenleg csak egy dolog van - DllGetClassObject. Ez ugyanaz a függvény, amely a rendszernek megmondja a kiszolgálónak, hogy milyen objektumot kell létrehoznia és biztosítania kell a rendszernek. Az MSDN-hez intézett fellebbezés a következő prototípust biztosítja ennek a funkciónak:

De innen származik a vitatott érv és mit jelent ez? És ezt a kérdést és a választ ráadásul szorgalmasan elkerültük bemutatásunk kezdetétől, de időközben az alkatrészprogramozás általában azzal kezdődik, hogy erre a kérdésre választ adnak. riid az interfész azonosítója. Filozófiai kiállításunk 5. paragrafusa - "hogyan kell kölcsönhatásba lépni egymással, maguk a tárgyak is tudják". Tény, hogy a COM objektumok kölcsönhatásba lépnek egymással interfészek és - semmi más.