Python bindings tutorial

Alf P. Steinbach alfps at start.no
Fri Mar 19 03:01:46 EDT 2010


* Tim Roberts:
> Dave Angel <davea at ieee.org> wrote:
>> There's no real reason parts of an exe cannot be exported, same as a 
>> dll. They are in fact the same structure. And in fact many other files 
>> in the Windows environment are also the same structure, from fonts to ocx's

This is a bit off-topic, but your explanation is incorrect in some key respects, 
so (no offense) to avoid readers getting an incorrect impression:
> Well, there IS a fundamental difference. EXEs and DLLs and the like do all
> have the same format. They all have a "transfer address"

Commonly called an "entry point".
This is the term you need to know about when e.g. linking object files.
>, where execution
> begins. That's the key problem. With a DLL, the transfer address goes to
> a DllMain, where certain DLL initialization is done, preparing the other
> entry points for use.

Right, modulo terminology: there's only one "entry point" in a PE format file.
> With an EXE, the transfer address goes to "main".

Sorry, no, the EXE entry point goes to a routine of no arguments.
Typically, in C and C++ that's a run time library routine (e.g. with Microsoft's 
run time library mainCRTStartup or one of its cousins) which in turn calls the 
C/C++ "main", while in Pascal it runs the main program, so on.
Note that the EXE entry point is probably still incorrectly documented as 
requiring WinMain signature -- it's the most infamous Microsoft documentation 
screw-up.
> So, when you load an EXE as a DLL, you will be RUNNING the program.

Sorry, no, that's not what happens.
The Windows API LoadLibrary(Ex) knows the difference between an EXE and a DLL.
It's documented as handling both sub-formats, and it does.
> That's is usually not what you want.

If that had happened then it would be a problem, yes. Happily it doesn't happen. 
I've discussed the real problems else-thread.
Cheers & hth.,
- Alf


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /