Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:dll不适用于Visual Studio 2017,但适用于g++;_C++_Visual Studio_Dll_Visual Studio 2017_G++ - Fatal编程技术网

C++ C++;:dll不适用于Visual Studio 2017,但适用于g++;

C++ C++;:dll不适用于Visual Studio 2017,但适用于g++;,c++,visual-studio,dll,visual-studio-2017,g++,C++,Visual Studio,Dll,Visual Studio 2017,G++,我在处理更复杂的代码时遇到了这个问题,这自然是一个简化的示例 dll不适用于VS,但适用于g++ 我有这个密码 #include <stdio.h> extern "C" __declspec(dllexport) void func(int a) { printf("a: %d\n", a); } 产出 Using ./test.dll... Traceback (most recent call last):

我在处理更复杂的代码时遇到了这个问题,这自然是一个简化的示例

dll不适用于VS,但适用于g++

我有这个密码

#include <stdio.h>      

extern "C" __declspec(dllexport) void func(int a)
{
    printf("a: %d\n", a);
}
产出

    Using ./test.dll...
Traceback (most recent call last):
  File "call.py", line 14, in <module>
    lib = ctypes.cdll.LoadLibrary(file_dll)
  File "..\anaconda3\lib\ctypes\__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "..\anaconda3\lib\ctypes\__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
Using test2.dll... a: 0
产出

    Using ./test.dll...
Traceback (most recent call last):
  File "call.py", line 14, in <module>
    lib = ctypes.cdll.LoadLibrary(file_dll)
  File "..\anaconda3\lib\ctypes\__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "..\anaconda3\lib\ctypes\__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
Using test2.dll... a: 0
有人知道我做错了什么吗?

错误“不是有效的Win32应用程序”通常表示位不匹配,其中64位进程尝试加载32位库,或者相反。如果发布的屏幕截图显示DLL为32位(platform=x86),那么python模块很可能为64位

错误消息的“Win32 application”部分并不表示引用的模块是32位的(在本例中确实是这样)。相反,“Win32应用程序”是(本机)Windows应用程序的技术术语,与Windows主机或客户端应用程序的位无关。引述以下资料:

Win32 API(也称为Windows API)是Windows应用程序的本机平台。此API最适合于需要直接访问系统功能和硬件的桌面应用程序。Windows API可用于所有桌面应用程序,32位和64位Windows通常支持相同的功能


如果您使用“Release”配置在VS中构建它会发生什么?也许Python无法(或不会)加载调试构建所需的支持内容。这一点很好,但刚刚经过测试,完全相同。此外,我用调试符号用
g++-g
编译了它,它也工作得很好。我相信VS需要.cpp文件中的
dllmain
函数来编译.dll库。可能还有其他要求。你是说在不同的文件中?奇怪的是,它编译时没有抱怨。@myradio冒着问显而易见的问题的风险,python进程也是32位的吗?