Skip to content

ctypes DLL servers

Use attribute ctypes_com_server of method setup to create a com dll server. Unlike the case with win32com, with ctypes.com only a dll server will be created. Also see: win32com servers & ctypes EXE servers

You can define and instantiate a Target class to explicitly add version info resources that get attached to the file as metadata.

file setup.py would look something like this:

# This is the distutils script for creating a Python-based com dll
# server using ctypes.com.  This script should be run like this:
#
#  % python setup.py py2exe
#
# After you run this (from this directory) you will find two directories here:
# "build" and "dist".  The .dll file in dist is what you are looking for.
##############################################################################

from distutils.core import setup
import py2exe
import sys

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        # for the version info resources (Properties -- Version)
        self.version = "0.0.1"
        self.company_name = "my company"
        self.copyright = "© 2006, my company"
        self.name = "my com server name"

my_com_server_target = Target(
    description = "my com server",
    # use module name for ctypes.com dll server
    modules = ["dir.my_com_server"],
    # the following line embeds the typelib within the dll
    other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],
    # we only want the inproc (dll) server
    create_exe = False
    )

setup(
    name="my_com_server",
    # the following two parameters embed support files within 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="some_name@some_company.com",
    packages=["dir"],
    ctypes_com_server=[my_com_server_target]
    )