>Vymyslel jsem dva postupy, ale ani u jednoho jsem nebyl dostatecne uspesny: >a) Puvodni zamer byl udelat v Ccku skeleton DLL knihovny a v ni pomoci >elmeru (http://elmer.sourceforge.net/) zapouzdrit python kod. To temer fungovalo.
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í. >b) Druhy postup predpoklada, ze jsem schopny pomoci py2exe vytvorit >DLL knihovnu primo z cisteho python kodu. I zde jsem byl uspesny a povedlo >se mi zkompilovat DLL knihovnu. Kdyz se ale podivam na exporty, ktere ta >knihovna ma, vidim tam pouze zakladni DllRegisterServer, DllGetClassObject >a dalsi, ktere ma kazdy COM DLL. Hloubam tady nad tim uz kolik hodin, >Google moc nepomohl (asi to moc lidi nepotrebuje) a nevim, jak tam dostat >sve vlasni exporty. Zajimave je, ze uvnitr kodu te DLL knihovny existuje >retezec "Vysledek", takze to ten skript my_com_server.py (viz. priloha) >s funkcemi obsahuje. 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é. COM server musíte ve Windows zaregistrovat pomocí utilitky comsrv32.exe. 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. 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í. Miloslav Ponkrác _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
