<div class="gmail_quote"><div>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.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">A nebylo by jednodušší rovnou použít Python C API? Podle mě by to nebylo<br>
tak těžké zapouzdřit těch pár funkcí.<br>
</blockquote><div><br>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.<br> <br></div>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Což je naprosto v pořádku, protože COM nepotřebuje exportovat funkce<br>
jako DLL exporty, protože COM mechanismus má svůj vlastní mechanismus<br>
binárně přenostitelných objektů s metodami. Takže to co jste získal je zcela<br>
správné.</blockquote><div><br>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.<br>
<br>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. <br></div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Abych vysvětlil COM funguje tak, že vytváří přenositelné třídy (jejichž<br>
binární<br>
rozhraní je přesně určeno, takže tuto třídu můžete použít v jakémkoli<br>
programovacím jazyce). COM server tedy exportuje několik různch tříd,<br>
v řeči COMu zvaných interface a ani ty třídy nexportuje na úrovni DLL,<br>
ale má<br>
k tomu svůj vlastní mechanismus pomocí volání Windows API funkcí začínající<br>
na Co* - a kterými dostanete vše potřebné - tedy v C ukazatel na objekt dané<br>
třídy (interface), a tím tedy i na virtuální tabulku metod této třídy,<br>
přes kterou<br>
dané metody třídy voláte. Musíte předem znát, jaká je struktura třídy, pokud<br>
to nechcete složitěji zjišťovat pomocí typové knihovny.</blockquote><div><br>Hm, program, ktery nacita ony DLL opravdu natvrdo hleda funkci daneho jmena. Takze ocekavam, ze model COM mi bohuzel nepomuze.<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Osobně si myslím, že bez bližších znalostí kolem COM záležitostí v C (pokud<br>
tedy tím druhým bindovaným jazykem je C) cestu b)<br>
rovnou vzdejte. Pokud chcete Python nabindovat s jazykem s dobrou podporou<br>
COMu (Visual Basic, Microsoft Office, Delphi, C++ Builder, C#, atd..) pak<br>
je to primitivní.</blockquote><div><br></div></div>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 :(.<br>
<br>Diky,<br>Marek<br>