У меня есть C ++ DLL. Я хочу сделать сервер Flask для вызова функций в этой DLL. Поэтому я использую ctypes
внутри Flask
. Вот мой код в views.py
:
from flask import render_template
from MusicServer_Flask import app
from ctypes import *
import os
#load Dll:
cppdll = CDLL("C:\\VS_projects\\MusicServer_Flask\\NetServerInterface.dll")
#wrapping DLL function:
initnetwork = getattr(cppdll, "?InitNetwork@@YAHQAD0H@Z") #The function can be accessed successfully
initnetwork.argtypes = [c_char_p,c_char_p,c_int]
initnetwork.restype = wintypes.BOOL
#define route:
@app.route('/InitNetwork/<LocalIP>/<ServerIP>/<LocalDeviceID>')
def InitNetwork(LocalIP, ServerIP, LocalDeviceID):
return initnetwork(LocalIP, ServerIP, LocalDeviceID)
С помощью этого вопроса я могу успешно вызвать эту функцию в интерактивном окне Python, используя следующее: InitNetwork(b"192.168.1.101",b"192.168.1.101",555)
:
Однако, когда я запускаю проект Flask и вхожу в этот маршрут: http://192.168.1.102:8081/InitNetwork/b"192.168.1.102"/b"22192.168.1.102"/555
Это выдает мне такую ошибку:
Похоже, что b"192.168.1.102"
становится b%22192.168.1.102%22
в запрошенном URL. Почему это происходит? Как я могу использовать правильный URL для вызова этой функции?
Спасибо за внимание.
Edit:
Благодаря ответу @Paula Thomas я думаю, что продвинулся на один шаг к ответу. Я изменил код, как показано ниже, чтобы преобразовать первый и второй входные параметры в байты:
@app.route('/InitNetwork/<LocalIP>/<ServerIP>/<LocalDeviceID>')
def InitNetwork(LocalIP, ServerIP, LocalDeviceID):
b_LocalIP = bytes(LocalIP,'utf-8')
b_ServerIP = bytes(ServerIP,'utf-8')
return initnetwork(b_LocalIP, b_ServerIP, LocalDeviceID)
Однако ни http://172.16.4.218:8081/InitNetwork/172.16.4.218/172.16.4.218/555
, ни http://172.16.4.218:8081/InitNetwork/"172.16.4.218"/"172.16.4.218"/555
не работают. Все равно выдает мне wrong type
ошибку. Кто-нибудь, пожалуйста, помогите?