Найти - Пользователи
Полная версия: DLL ctypes Вызов функции с параметрами HELP
Начало » Центр помощи » DLL ctypes Вызов функции с параметрами HELP
1 2 3
2rei
Есть DLL c таким кодом
#include “stdafx.h”
#include “NSNetwork.h”

extern “C” __declspec(dllexport) int __stdcall CalcNeuralNet(
LPCWSTR dllPath_u, LPCWSTR weightsPath_u,
double* inputs, double* outputs)
{
// Преобразуем строки из Unicode в обычные
CString dllPath (dllPath_u);
CString weightsPath (weightsPath_u);

// Создание сети
NSRecallNetwork nn(dllPath);
if (!nn.IsLoaded()) return (1);

// Загрузка весов
if (nn.LoadWeights(weightsPath) != 0) return (2);

// Подача входных данных и расчет выходов
if (nn.GetResponse(1, inputs, outputs) != 0) return (3);

return 0;
}

название DLLM.dll



пишу в питоне

from ctypes import *
lib=cdll.DLLM

inputData=“путь до входных значние”
outputdata = “путь до выходных”
lib.getResponse(inputData, outputData)

шелл пишет NameError: name ‘inputData’ is not defined

ну в приципе в теорий мы же не определил что они буду передоваться наверна из за этого
если в шел пишу проста lib.getResponse
<_FuncPtr object at 0x02847120>
тоесть вроде как он функцию нашел но вот как ей передать данные
люди помогите обьясние очень надо готов отблагодарить!
Actor
с этим дела не имел, но искал бы в первую очередь тут
2rei
Да понимаете спасибо за ответ за время потраченной тут проблема насоколько я понимаю в том как передать параметры длл на С++ сделана ,
doza_and
from ctypes import  *
.......

inputData=u"путь до входных значние"
outputdata = u"путь до выходных"
import numpy as np
d1=np.zeros(5,dtype='d')
d2=np.zeros(5,dtype='d')
lib.getResponse(inputData, outputData,d1.ctypes.data,d2.ctypes.data)
те
делайте строки - unicode
И куда вы выкинули еще два аргумента функции?

шелл пишет NameError: name ‘inputData’ is not defined - значит с ошибками пишете имя
2rei
да здесь моя опечатка со входными исходными значения спасибо за ответ очень благодарен , not defined да прощу прощения опечатался .
-*- coding: cp1251 -*-
from ctypes import *
lib=cdll.DLLM
inputs=u“путь до входных значние”
outputs = u“путь до выходных”

import numpy as np
d1=np.zeros(5,dtype='d')
d2=np.zeros(5,dtype='d')
lib.getResponse(1,inputs, outputs,d1.ctypes.data,d2.ctypes.data)


WindowsError: exception: access violation reading 0x00000001
про строки unicode буду разбираться спс за помощь ответы жду комментариев
2rei
я так понимаю что ему не нравятся аргументы в вызове
2rei
from ctypes import *
lib=cdll.NeuroSolutionsAdapter
inputs=u“C:\Python27\DLL1\InputData.txt”
outputs = u“C:\Python27\DLL1\Desired.txt”
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(5,dtype='d')
d2=np.zeros(5,dtype='d')
lib.NSRecallNetwork(dllpath,d2.ctypes.data)
lib.loadWeights(weightsPath,d1.ctypes.data)
lib.CalcNeuralNet(dllPath,d2.ctypes.data, weightsPath,d2.ctypes.data, inp,out)
AttributeError: function ‘NSRecallNetwork’ not found
интересно оказываесться in это оператор и переменную in нельзя использовать=)))))))))
я конечно понимаю что скорей всего я опечатася в названии функции но я пробовал разные варинаты а он ругаеться !!
2rei
lib.CalcNeuralNet(inputs,d2.ctypes.data, outputs,d1.ctypes.data)
опять не может найти функциюAttributeError: function ‘CalcNeuralNet’ not found ну как так
from ctypes import *
lib=cdll.NeuroSolutionsAdapter
inputs=u“C:\Python27\DLL1\InputData.txt”
outputs = u“C:\Python27\DLL1\DesiredData.txt”
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(5,dtype='d')
d2=np.zeros(5,dtype='d')
lib.CalcNeuralNet(inputs,d2.ctypes.data, outputs,d1.ctypes.data)
2rei
тут я вызываю длл не редактируемую которая как исходная
попробовал заменит функцию NSRecallNetwork на CreateNetwork
вроде отработала однако же результата отработала или нет можно узнать тока на выходе а выход выдает следующие

# -*- coding: cp1251 -*-
from ctypes import *
lib=cdll.DLLM
AD=cdll.NeuroSolutionsAdapter
inputs=u“C:\Python27\DLL1\InputData.txt”
outputs = u“C:\Python27\DLL1\DesiredData.txt”
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(5,dtype='d')
d2=np.zeros(5,dtype='d')
lib.createNetwork(dllpath,d1.ctypes.data)
lib.loadWeights(weightsPath,d2.ctypes.data)
lib.getResponse(100, inputs,d1.ctypes.data,outputs,d2.ctypes.data)

WindowsError: exception: access violation reading 0x00000064
непонятный зверь
doza_and
Похоже вы прыгаете по директориям, а явного пути к dll не указали. В этом случае у вас после каждого чиха может перестать грузиться dll. Пути опять у вас неправильно указаны нужны двойные слеши. d1=np.zeros(5,dtype='d') 5 я указал для примера - вам надо выяснить какого размера ожидаются области памяти и проч и проч…

Если вам срочно нужно - попросите нормального питонщика какого - да вышлите ему код полностью чтоб вам собрал вызов функции из dll.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB