Если это просто левая, никак не связанная с системой DLL, то, скорее всего, без написания расширения на C не обойтись.
Если же это зарегистрированный в винде COM-объект, то в Питоне есть модуль для работы с такими объектами.
Я делал это так:
from win32com.client import Dispatch
try:
comobj=Dispatch("Super_puperDLL.ComObject")
except:
print ("COM-объект не найден")
sys.exit(1)
где вместо "Super_puperDLL.ComObject" ставишь правильное название COM-объекта. Все существующие COM-объекты в винде можно посмотреть, например, в Excel, точнее, в его VisualBasic-редакторе, скорее всего в какой-нибудь VisualStudio тоже можно.
Далее пользуешься методами объекта в переменной comobj. Имена и аргументы этих методов разные и зависят от DLL.
Ага, разобрался с boost-python3. Невнимательно посмотрел. Есть пакет, но был не установлен.
Пример нашёл в интернете коротенький. Файл greet_binding.cpp:
#include <iostream>
#include <boost/python/def.hpp>
#include <boost/python/module.hpp>
using namespace std;
namespace bp = boost::python;
void say_greeting(const char* name)
{
cout << "Hello, " << name << "!\n";
}
BOOST_PYTHON_MODULE(greet)
{
bp::def("say_greeting", say_greeting);
}
Перейдя в каталог с файлом нужно собрать его командой (линукс):
g++ greet_binding.cpp -I/usr/include/python3.4m -lboost_python3 -lpython3.4m -o greet.so -shared -fPIC
Теперь в каталоге появился файл greet.so. Здесь же размещаем файл test.py с текстом:
import greet
a = greet.say_greeting("Eric")
print (a)
Запускаем файл из консоли, читаем в консоли:
Hello, Eric!
None
Хоть это и примитивный Hello World, но он показывает все задействованные механизмы создания библиотеки на плюсах как модуля для питона.
Разумеется, это подходит для случаев самописного модуля в виде .so или .dll. Если бинарник уже кем-то создан, то ctypes.
Кстати, с кириллицей проблем нет в линуксе при использовании boost.
dll на FB
' This function adds two numbers (i've taken it from Freebasic manuel !)
Function AddNumbers CDECL Alias "AddNumbers" ( ByVal operand1 As Integer, ByVal operand2 As Integer) As Integer Export
AddNumbers = operand1 + operand2
End Function
' This one shows uppercase text
Function ShowText CDECL Alias "ShowText" (ByVal MyText As String) As Integer Export
Print ucase(Mytext)
Return 1
End Function
Python#__ LOAD MODULE CTYPE __
from ctypes import *
#__ LOAD THE DLL __
libFreeBasic = cdll.LoadLibrary("mydll.dll")
#__ CALL FUNCION WITH INTEGER PARAMETER __
print (libFreeBasic.AddNumbers(5,7))
#__ CALL FUNCTION WITH STRING PARAMETER AND GET RETURN CODE__
s_MyText = "Hello"
c_MyText = c_char_p(s_MyText)
RetCode = libFreeBasic.ShowText(s_MyText)
RetMsg = "Return code : " + str(RetCode)
print (RetMsg)
Traceback (most recent call last):
File "C:\Users\Den\Desktop\FB\testdll.blend\Text", line 5, in <module>
File "C:\Program Files\Blender Foundation\Blender\2.78\python\lib\ctypes\__ini
t__.py", line 425, in LoadLibrary
return self._dlltype(name)
File "C:\Program Files\Blender Foundation\Blender\2.78\python\lib\ctypes\__ini
t__.py", line 347, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] Не найден указанный модуль
Error: Python script fail, look in the console for now...
Вот малёха переделанная для x64... должна окно 400х400 нарисовать...
' This function adds two numbers (i've taken it from Freebasic manuel !)
Function AddNumbers CDECL Alias "AddNumbers" ( ByVal operand1 As Integer, ByVal operand2 As Integer) As Integer Export
AddNumbers = operand1 + operand2
End Function
' This one shows uppercase text
Function ShowText CDECL Alias "ShowText" (ByVal MyText As String) As Integer Export
'Print ucase(Mytext)
ScreenRes 400,400
Return 1
End Function
вписал полный путь, модуль проимпортировался:
>>> #__ LOAD THE DLL __
>>> libFreeBasic = cdll.LoadLibrary("mydll.dll")
Traceback (most recent call last):
File "<blender_console>", line 1, in <module>
File "I:\Programs64\Blender\blender-2.78-windows64\2.78\python\lib\ctypes\__init__.py", line 425, in LoadLibrary
return self._dlltype(name)
File "I:\Programs64\Blender\blender-2.78-windows64\2.78\python\lib\ctypes\__init__.py", line 347, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] Не найден указанный модуль
>>> libFreeBasic = cdll.LoadLibrary(r"D:\moe\blender\Vopros\mydll.dll")
>>> print (libFreeBasic.AddNumbers(5,7))
12
на функцию ShowText появилось окошко.