[python] py2exe dll export

slush slush na centrum.cz
Sobota Květen 31 00:24:27 CEST 2008


Dekuji za reakci. O primem pouziti C API jsem samozrejme uvazoval nejdriv,
ale odradila me relativni slozitost (v C jsem pred mnoha lety delal, ale
pamatuji si opravdu jenom zaklady). S kodem vygenerovanym Elmerem se mi
pracovalo mnohem jednoduseji. Kazdopadne vypada to, ze to zkusim jako treti,
nejkrajnejsi variantu.


> A nebylo by jednodušší rovnou použít Python C API? Podle mě by to nebylo
> tak těžké zapouzdřit těch pár funkcí.
>

Ona je to vseho vsudy JEDNA funkce, ale je ji predavana silena dynamicka
nekolikaurovnova struktura, a to pro me bude v ccku opravdovy čelenž :-). To
je ale pro python konferenci offtopis.


> Což je naprosto v pořádku, protože COM nepotřebuje exportovat funkce
> jako DLL exporty, protože COM mechanismus má svůj vlastní mechanismus
> binárně přenostitelných objektů s metodami. Takže to co jste získal je
> zcela
> správné.


Aha, to je pro me novinka. O COM neco malo vim, ale predpokladal jsem, ze na
urovni rozhrani DLL se jedna o "klasicke" DLL + nejake rezervovane funkce
(viz RegisterServer, ...). To, ze COM DLL vubec nepropaguji exporty je tedy
zasadni problem.

Znamena to tedy, ze pomoci py2exe nelze vytvaret stare dobre DLL? Snazil
jsem se radit s Googlem opravdu peclive, kdykoliv jsem ale narazil na zminky
o DLL, jednalo se o COM.


> Abych vysvětlil COM funguje tak, že vytváří přenositelné třídy (jejichž
> binární
> rozhraní je přesně určeno, takže tuto třídu můžete použít v jakémkoli
> programovacím jazyce). COM server tedy exportuje několik různch tříd,
> v řeči COMu zvaných interface a ani ty třídy nexportuje na úrovni DLL,
> ale má
> k tomu svůj vlastní mechanismus pomocí volání Windows API funkcí začínající
> na Co* - a kterými dostanete vše potřebné - tedy v C ukazatel na objekt
> dané
> třídy (interface), a tím tedy i na virtuální tabulku metod této třídy,
> přes kterou
> dané metody třídy voláte. Musíte předem znát, jaká je struktura třídy,
> pokud
> to nechcete složitěji zjišťovat pomocí typové knihovny.


Hm, program, ktery nacita ony DLL opravdu natvrdo hleda funkci daneho jmena.
Takze ocekavam, ze model COM mi bohuzel nepomuze.

>
> Osobně si myslím, že bez bližších znalostí kolem COM záležitostí v C (pokud
> tedy tím druhým bindovaným jazykem je C) cestu b)
> rovnou vzdejte. Pokud chcete Python nabindovat s jazykem s dobrou podporou
> COMu (Visual Basic, Microsoft Office, Delphi, C++ Builder, C#, atd..) pak
> je to primitivní.


Diky za vycerpavajici info. Do programovani plnohodnotneho COM objektu bych
se rozhodne nepoustel a navic vim,ze v tomto pripade to je zbytecne. Spis me
prekvapuje, ze by python opravdu neumel obyc. DLL :(.

Diky,
Marek
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20080531/2b7df4c1/attachment.htm 


Další informace o konferenci Python