Files
cpython/PC/example_nt

Example Python extension for Windows NT

=======================================



This directory contains everything you need to build a Python

extension module using Microsoft VC++ 4.x ("Developer Studio"), except

for the Python distribution.  It has been tested most recently with

version 4.2.



The "example_nt" subdirectory should be an immediate subdirectory of

the Python source directory -- a direct sibling of Include and PC, in

particular, which are referenced as "..\Include" and "..\PC".  In

other words, it should *not* be used "as is".  Copy or move it up one

level or you will regret it!  (This is done to keep all the PC

specific files inside the PC subdirectory of the distribution, where

they belong.)



It is also assumed that the build results of Python are in the

directory ..\vc40.  In particular, the python15.lib file is referred

to as "..\vc40\python15.lib".



In order to use the example project from Developer Studio, use the

"File->Open Workspace..." dialog (*not* the "File->Open..." dialog!).

Change the pattern to "*.mak" and select the file "example.mak".  Now

choose "File->Save All" and the othe project files will be created.



In order to check that everything is set up right, try building:

choose "Build->Build example.dll".  This creates all intermediate and

result files in a subdirectory which is called either Debug or Release

depending on which configuration you have chosen (as distributed,

Debug is selected as the default configuration).



Once the build has succeeded, test the resulting DLL.  In a DOS

command window, chdir to that directory.  You should now be able to

repeat the following session "(C>" is the DOS prompt, ">>>" is the

Python prompt):



	C> ..\..\vc40\python.exe

	>>> import example

	>>> example.foo()

	Hello, world

	>>>





Creating the project

--------------------



There are two ways to use this example to create a project for your

own module.  First, choose a name ("spam" is always a winner :-) and

create a directory for it.  Copy your C sources into it.  Note that

the module source file name does not necessarily have to match the

module name, but the "init" function name should match the module name

-- i.e. you can only import a module "spam" if its init function is

called "initspam()", and it should call Py_InitModule with the string

"spam" as its first argument.  By convention, it lives in a file

called "spam.c" or "spammodule.c".  The output file should be called

"spam.dll" or "spam.pyd" (the latter is supported to avoid confusion

with a system library "spam.dll" to which your module could be a

Python interface).



Now your options are:



1) Clone example.mak.  Start by copying example_nt\example.mak to

spam\spam.mak.  Do a global edit on spam.mak, replacing all

occurrences of the string "example" by "spam", and all occurrences of

"DEP_CPP_EXAMP" by something like "DEP_CPP_SPAM".  You can now use

this makefile to create a project file by opening it as a workspace

(you have to change the pattern to *.mak first).



2) Create a brand new project; instructions are below.



In both cases, copy example_nt\example.def to spam\spam.def, and edit

spam\spam.def so its second line contains the string "initspam".  If

you created a new project yourself, add the file spam.def to the

project now.



You are now all set to build your extension, unless it requires other

external libraries, include files, etc.  See Python's Extending and

Embedding manual for instructions on how to write an extension.





Creating a brand new project

----------------------------



If you don't feel comfortable with editing Makefiles, you can create a

brand new project from scratch easily.



Use the "File->New..." dialog to create a new Project Workspace.

Select Dynamic-Link Library, enter the name ("spam"), and make sure

the "Location" is set to the spam directory you have created (which

should be a direct subdirectory of the Python build tree).  Select

Win32 as the platform (in my version, this is the only choice).  Click

"Create".



Now open the "Build->Settings..." dialog.  (Impressive, isn't it?  :-)

You only need to change a few settings.  Make sure you have both the

Debug and the Release configuration selected when you make the first

change.  Select the "C/C++" tab.  Choose the "Preprocessor" category

in the popup menu at the top.  Type the following text in the entry

box labeled "Addditional include directories:"



	..\Include,..\PC



You must also change the run-time library.  This must be done

separately for the Release and Debug configurations.  Choose the "Code

Generation" category in the C/C++ tab.  In the box labeled "Use

run-time library", choose "Multithreaded DLL" for the Release

configuration, and "Debug Multithreaded DLL" for the Debug

configuration.  That's all.



You should now first create the file spam.def as instructed in the

previous section.



Now chose the "Insert->Files into Project..." dialog.  Set the pattern

to *.* and select both spam.c and spam.def and click OK.  (Inserting

them one by one is fine too.)  Using the same dialog, choose the file

..\vc40\python15.lib and insert it into the project.