python: Как загрузить класс в dll? - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу импортировать класс в dll. Моя dll:

#ifndef MyDLL_EXPORTS
#define MyDLL_EXPORT __declspec(dllexport)
#else
#define MyDLL_EXPORT __declspec(dllimport)
#endif


class MyDLL_EXPORT arithmetic_operation
{
public:
    double add(double a, double b);
};

double arithmetic_operation::add(double a, double b)
{
    return a + b;
}

Я могу вызвать эту dll в Visual Studio. Затем я хочу позвонить в класс python. После поиска метода из inte rnet, ctypes может быть решением. Тем не менее, я все еще не могу решить эту проблему.

Во-первых, я использую lib = cdll.LoadLibrary('MyDLL.dll'), и сообщается об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Anaconda3\envs\general\lib\ctypes\__init__.py", line 442, in LoadLibrary
    return self._dlltype(name)
  File "D:\Anaconda3\envs\general\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid win32 application. 

Кроме того, я попытался lib = windll.LoadLibrary('MyDLL.dll'), и это сообщить об этой же ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Anaconda3\envs\general\lib\ctypes\__init__.py", line 442, in LoadLibrary
    return self._dlltype(name)
  File "D:\Anaconda3\envs\general\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid win32 application. 

Среда:

win 10, 64 bit
VS 2015 64 bit: configuration Release/Debug x64
python 3.7.5 (default. Oct 31 2019, 15:18:51) [MSV v.1916 64 bit (AMD64)]::Anaconda, Inc. on win32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...