how use ctypes with msvc*.dll from within matlab on windows
Question: i'm using winpython (2.7) on windows 7/64, matlab 2015a, with matlab's new
[python bridge](http://www.mathworks.com/help/matlab/call-python-
libraries.html).

    
    
    >> py.ctypes.util.find_library('c')
    
    ans = 
    
      Python str with no properties.
    
        msvcr90.dll
    
    >> py.ctypes.util.find_msvcrt()
    
    ans = 
    
      Python str with no properties.
    
        msvcr90.dll
    
    >> py.ctypes.CDLL(py.ctypes.util.find_library('c'))
    Python Error: [Error 1114] A dynamic link library (DLL) initialization routine failed
    
    >> x=CDLL('C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\msvcr90.dll')
    Python Error: [Error 1114] A dynamic link library (DLL) initialization routine failed
    

a popup also comes up:

    
    
    Microsoft Visual C++ Runtime Library
    R6034 "an application has made an attempt to load the c runtime library incorrectly"
    

a [couple other](http://stackoverflow.com/a/14680947/1441998) [SO
answers](http://stackoverflow.com/questions/27273594/run-time-
error-r6034-when-compiling-from-the-command-prompt#comment43021210_27273594)
suggest it's matlab putting its incompatible copy of msvc*.dll somewhere on
the path, so i removed everything not from WinPython in sys.path (just
matlab's `\bin\win64\` and the `\Python27\site-packages\` from another python
install i have):

    
    
    >> py.pprint.PrettyPrinter().pprint(py.sys.path)
    ['',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\python27.zip',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\DLLs',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\plat-win',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\lib-tk',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\FontTools',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32\\lib',
     'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\Pythonwin']
    

there are still tons of msvc*.dll sprinkled everywhere on the system, and
surely some on the PATH:

    
    
    >> x = py.os.environ
    
    x = 
    
      Python _Environ with properties:
    
        data: [1x1 py.dict]
    
        {'TMP': 'C:\\Users\\nlab\\AppData\\Local\\Temp', <<snip>>, 'USERPROFILE': 'C:\\Users\\nlab'}
    
    >> cellfun(@(s)fprintf('%s\n',s),strsplit(char(x{'PATH'}),';'))
    C:\Program Files\Haskell\bin
    C:\Program Files\Haskell Platform\2014.2.0.0\lib\extralibs\bin
    C:\Program Files\Haskell Platform\2014.2.0.0\bin
    C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64
    C:\Users\nlab\Downloads\opencv\build\x64\vc12\bin
    C:\ProgramData\Oracle\Java\javapath
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\libnvvp\
    C:\Program Files\ImageMagick-6.8.3-Q16
    C:\Program Files (x86)\OSSBuild\GStreamer\v0.10.7\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\libnvvp\
    C:\Program Files (x86)\PHP\
    C:\Windows\system32
    C:\Windows
    C:\Windows\System32\Wbem
    C:\Program Files\Intel\DMIX
    C:\Program Files\TortoiseSVN\bin
    C:\Program Files\SlikSvn\bin\
    C:\Program Files\MySQL\MySQL Server 5.5\bin
    C:\Program Files (x86)\Common Files\Acronis\SnapAPI\
    C:\Program Files (x86)\PostgreSQL\9.2\bin
    C:\Python27
    C:\Python27\Scripts
    C:\Program Files\Microsoft SQL Server\110\Tools\Binn\
    C:\Windows\System32\WindowsPowerShell\v1.0\
    C:\Program Files (x86)\LilyPond\usr\bin
    C:\Program Files (x86)\Git\cmd
    C:\Program Files\Microsoft Windows Performance Toolkit\
    C:\Program Files\TortoiseGit\bin
    C:\Program Files (x86)\QuickTime\QTSystem\
    C:\Program Files (x86)\Skype\Phone\
    C:\Program Files\Mosek\7\tools\platform\win64x86\bin
    C:\Program Files\Haskell Platform\2014.2.0.0\mingw\bin
    C:\Users\nlab\AppData\Roaming\cabal\bin
    C:\Program Files (x86)\SSH Communications Security\SSH Secure Shell
    C:\Gtk+\bin
    

i notice that in `C:\Program Files\MATLAB\R2015a\bin\win64\` we only have
`msvc[r|p][100|110].dll` \-- does that mean it won't work with a distribution
of python based on msvcr90 like winpython 2.7.9.5?


Answer: define this as file `msvc.py`:

    
    
    import ctypes
    print ctypes.cdll.msvcrt
    

then in matlab:

    
    
    >> py.importlib.import_module('msvc')
    <CDLL 'msvcrt', handle fe190000 at 771c2b38>
    
    ans = 
    
      Python module with properties:
    
        ctypes: [1x1 py.module]
    
        <module 'msvc' from 'msvc.pyc'>
    
    >> x = py.ctypes.cdll
    
    x = 
    
      Python LibraryLoader with properties:
    
        msvcrt: [1x1 py.ctypes.CDLL]
    
        <ctypes.LibraryLoader object at 0x00000000771D6278>
    
    >> x.msvcrt
    
    ans = 
    
      Python CDLL with no properties.
    
        <CDLL 'msvcrt', handle fe190000 at 771c2b38>
    

i don't know why it's necessary to use `msvc.py` \-- just importing `ctypes`
does not give you a `cdll` with an `msvcrt` property.

