[python-win32] Wrapper Windows Installer API functions, ctypes, .dll

Erik Fløisbonn eriflo at gmail.com
Fri Feb 22 19:16:24 CET 2008


Hello, I am creating a .dll that I load in python with ctypes. The .dll
calls Windows Installer API functions (like MsiEnumProducts). I am having
trouble calling these functions from python. When I import the msilib (or
_msi) that comes with python, the function calls work. But when I do not
import them, the call does not work and I get the following error message:

WindowsError: [Error 182] The operatingsystem can not run %1

(Original message is in norwegian: WindowsError: [Error 182]
Operativsystemet kan ikke kjøre %1)

I am wondering why the function calls are not working when I do not import
the msi module, and why they work when I do import the module.


I am running Windows Vista and python 2.5.1. I am compiling the source code
with cl (from the windows SDK) like this:

cl /LD msi.c msi.def  "C:\Program Files\Microsoft
SDKs\Windows\v6.0\Lib\Msi.lib"


My python file looks like this:

from ctypes import *
# import msilib (everything works when I uncomment this)
print cdll.LoadLibrary("C:\Users\Erik\Documents\INF5660\Msi.dll").test(2)



The test function is defined like this in msi.c

int test(int inn) {
    char product[100]; int i = 0;
    while (!MsiEnumProducts(i++, product)) { // Calling the api function
(defined in msi.h)
        printf("%s", product);
    }
    return inn*2;
}

I have looked through the _msi.c source code for python 2.5.1, but I can not
find any clues to what it does to make my functions work, and I have no idea
what I am doing wrong with the creation of my wrappers. Anyone knows?

Have a nice day,
- Erik
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-win32/attachments/20080222/d9d6eead/attachment-0001.htm 


More information about the python-win32 mailing list