Python ctypes无效的Win32 dll与有效的Win32 dll

Python ctypes无效的Win32 dll与有效的Win32 dll,python,ctypes,Python,Ctypes,我正在尝试包装一个小的cpp文件,该文件将获得一个文件的巨型图标。但是,当我尝试从dll目录中启动的命令行调用它并使用以下命令调用dll时,它不起作用 命令行(与dll位于同一目录中) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 LoadLibrary中第443行的文件“C:\Python27\lib\ctypes\u_init\u uuuuu.py” 返回自我类型(名称) 文件“C:\Python27\lib\ctypes\uuuu init\uuuuu.py”,第365行,在ini

我正在尝试包装一个小的cpp文件,该文件将获得一个文件的巨型图标。但是,当我尝试从dll目录中启动的命令行调用它并使用以下命令调用dll时,它不起作用

命令行(与dll位于同一目录中) 回溯(最近一次呼叫最后一次):
文件“”,第1行,在
LoadLibrary中第443行的文件“C:\Python27\lib\ctypes\u_init\u uuuuu.py”
返回自我类型(名称)
文件“C:\Python27\lib\ctypes\uuuu init\uuuuu.py”,第365行,在init
self.\u handle=\u dlopen(self.\u名称,模式)
WindowsError:[错误193]%1不是有效的Win32应用程序

GetIcon.cpp
//GetIcon.cpp:定义DLL应用程序的导出函数。
//
#包括“stdafx.h”
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
HICON GetJumboIcon(char*filePath);
HICON GetJumboIcon(LPCWSTR文件路径){
SHFILEINFOW sfi={0};
SHGetFileInfo(文件路径,-1,&sfi,sizeof(sfi),SHGFI\u SYSICONINDEX);
//获取系统的映像列表
HIMAGELIST*图像列表;
HRESULT HRESULT=SHGetImageList(超大型、IID图像列表(void**)和图像列表);
如果(hResult==S_OK){
HICON HICON;
hResult=((IImageList*)imageList)->GetIcon(sfi.iIcon、ILD_TRANSPARENT和hIcon);
如果(hResult==S_OK){
//如果有效,请退回。
返回hIcon;
}
}
}

我使用的是x64 Python,我使用的是VStudio 2013

可能您的项目目标是32位x86,而不是x64。只需使用正确的CPU目标重新构建DLL。并确保您正在导出符号,或者在声明中使用
\uu declspec(dllexport)
,或者使用module.DEF文件。这正是我所怀疑的,但我使用的是VS 2013 Pro,但除了win32之外,我似乎没有任何其他选项。您是否在configuration manager中设置了目标?请看。@eryksun,我没有看到x64,所以我以win32为基础创建了一个新的。我重新编译了,但仍然不起作用。(所以我猜我需要在某个地方更改一些值)。我尝试根据更改配置(请参见
将Win32项目设置复制到64位项目配置中),但也没有成功。某些配置选项未显示。您的项目可能以32位x86而不是x64为目标。只需使用正确的CPU目标重新构建DLL。并确保您正在导出符号,或者在声明中使用
\uu declspec(dllexport)
,或者使用module.DEF文件。这正是我所怀疑的,但我使用的是VS 2013 Pro,但除了win32之外,我似乎没有任何其他选项。您是否在configuration manager中设置了目标?请看。@eryksun,我没有看到x64,所以我以win32为基础创建了一个新的。我重新编译了,但仍然不起作用。(所以我猜我需要在某个地方更改一些值)。我尝试根据更改配置(请参见
将Win32项目设置复制到64位项目配置中),但也没有成功。某些配置选项未显示。您的项目可能以32位x86而不是x64为目标。只需使用正确的CPU目标重新构建DLL。并确保您正在导出符号,或者在声明中使用
\uu declspec(dllexport)
,或者使用module.DEF文件。这正是我所怀疑的,但我使用的是VS 2013 Pro,但除了win32之外,我似乎没有任何其他选项。您是否在configuration manager中设置了目标?请看。@eryksun,我没有看到x64,所以我以win32为基础创建了一个新的。我重新编译了,但仍然不起作用。(所以我猜我需要在某个地方更改一些值)。我尝试根据更改配置(请参见
将Win32项目设置复制到64位项目配置中),但也没有成功。一些配置选项没有出现。
from ctypes import *
lib=ctypes.cdll.LoadLibrary("GetIcon.dll")
// GetIcon.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "stdafx.h"
#include <shlobj.h>
#include <shlguid.h>
#include <shellapi.h>
#include <commctrl.h>
#include <commoncontrols.h>

HICON GetJumboIcon(char *filePath);



HICON GetJumboIcon(LPCWSTR filePath) {
    SHFILEINFOW sfi = { 0 };
    SHGetFileInfo(filePath, -1, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX);
    //Get Image list for system
    HIMAGELIST* imageList;
    HRESULT hResult = SHGetImageList(SHIL_EXTRALARGE, IID_IImageList, (void**)&imageList);
    if (hResult == S_OK) {
        HICON hIcon;
        hResult = ((IImageList*)imageList)->GetIcon(sfi.iIcon, ILD_TRANSPARENT, &hIcon);

        if (hResult == S_OK) {
            //if it works, return it.
            return hIcon;
        }

    }
}