Zdravim,

snazim se uz par dni rozchodit binding mezi jednou Win aplikaci a Pythonem.
Aplikace podporuje system pluginu na zaklade DLL knihoven (nacita DLL
knihovny a ocekava funkce s urcitymi jmeny).

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. Povedlo se mi zkompilovat Cckovy kod do DLL a zavolat ho jako
plugin, stejne tak se mi povedlo rozchodit Elmer tak, ze mi (pod Linuxem)
generoval adekvatni Cckovy kod, ktery by slo pouzit v te DLL kostre. Narazil
jsem ale na problem, ze nevim, jak zkompilovat kod Elmeru pod Windows,
protoze Elmer je podporovany jen na Linuxovych kompilatorech :-). Kdybyste
nekdo vedel...

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.

Jelikoz predpokladam, ze v bode b) najdu vice lidi, kteri s tim maji nejakou
zkusenost, prikladam ukazkovy setup.py, ktery mi generuje DLL kod (a ve
kterem je zrejme neco spatne).

Pozn: Priznam se, ze z py2exe nejsem moc moudry. Predpokladal jsem, ze class
Target je prave ona class, jejiz funkce jsou exportovany v DLLku (proto jsem
tam vytvoril nejake funkce). Pak me ale zmatlo, ze py2exe vyzadoval
existenci nejakeho modulu, tak jsem vytvoril jeste my_com_server.py, ktery
opet obsahuje jakousi prazdnou tridu s par funkcemi...

Diky za jakoukoliv radu,
Marek
from distutils.core import setup
import py2exe
import sys

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        self.version = "0.0.1"
        self.company_name = "my company"
        self.copyright = "2006, my company"
        self.name = "my com server name"
    def funkceTarget(self):
        return 42

    def funkce(self, promenna):
        return promenna
 
my_com_server_target = Target(
    description = "my com server",
    # use module name for win32com exe/dll server
    modules = ["my_com_server"],
    # specify which type of com server you want (exe and/or dll)
    create_exe = False,
    create_dll = True
    )
 
setup(
    name="my_com_server",
    # the following two parameters embed support files within exe/dll file
    options={"py2exe": {"bundle_files": 1, }},
    zipfile=None,
    version="0.0.1",
    description="my com server",
    # author, maintainer, contact go here:
    author="First Last",
    author_email="[EMAIL PROTECTED]",
    #packages=["cesta"],
    com_server=[my_com_server_target]
    )
class my_com_server:
	def __init__(self):
		print "Inicializace"
	def funkce(self):
		return "Vysledek"
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem