Rahul VB
Я хотел бы поблагодарить Ричарда Маккатчана за его полезное решение. Используя это, я придумал способ вызова DLL из кода python.
1. Во-первых, если ваше приложение python является 64-битным, dll, которую вы создаете с помощью MingW, также должна быть 64-битной. поэтому обязательно загрузите совместимую версию dll-файла.
2. Пожалуйста, не создавайте общие объекты и не пытайтесь импортировать их, это не сработает.
Общие объекты используются в системах POSIX. Если вы сделаете это, то получите следующую ошибку:
Цитата:
Обратная трассировка (самый недавний призыв последнего):
Файл "function.py", строка 3, в <модуле>
hllDll = под.Уиндл ("someso.dll")
Файл "C:\Python35\lib\ctypes\__init__.py", строка 347, in __init__
сам._handle = _dlopen(самовыдвижение._name, режим)
OSError: [WinError 193] %1 не является допустимым приложением Win32
Допустим, у нас есть программа ниже c в файле под названием mydll.c:
__declspec(dllexport) int __cdecl Add(int a, int b)
{
return (a + b);
}
- ____declspec(dllexport): Это в основном позволяет нам указать спецификатор класса хранения.
- Это указывает компилятору, что функция или objecy экспортируется из dll-файла.
- Аналогично существует еще один спецификатор класса хранения под названием dllimport, который сообщает компилятору, что
экспортированный объект можно импортировать в другой файл.
Примечание: Вы можете использовать компилятор Mingw в соответствии с вашим приложением python, то есть 32 или 64 бит.
Вы можете скомпилировать его, используя следующие шаги:
gcc -c mydll.c
gcc -o basicDLL.dll -s -shared mydll.o -Wl,--subsystem,windows
python basicApplication.py
python basicApplication.py
Давайте посмотрим на флаги, используемые в приведенных выше командах для компиляции:
-Wl: все, что следует за этим флагом, передается в качестве аргумента компоновщику.
Это в конечном итоге станет вызовом компоновщика, как показано ниже:
ld --Подсистема windows
В основном этот вызов будет указывать компоновщику установить тип подсистемы заголовка PE в windows.
Это будет означать, что будет создана библиотека dll, которая компилируется с помощью mingw и должна быть запущена в windows.
Давайте посмотрим на код на Python :
from ctypes import *
lib = CDLL('basicDLL')
print (lib.Add(1,2))
Назовите этот файл чем угодно, скажем basicApplication.пай и давай запустим его.
Выход равен 3
Обратите внимание: внося какие-либо изменения в библиотеку dll, придется перестраиваться заново. Это означает, что вы сначала компилируете файл .c, а затем генерируете из него dll.
ctypes-это модуль, который очень полезен для расширения функциональных возможностей c и python друг с другом.