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