Форум сайта python.su
Есть 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>
тоесть вроде как он функцию нашел но вот как ей передать данные
люди помогите обьясние очень надо готов отблагодарить!
Офлайн
с этим дела не имел, но искал бы в первую очередь тут
Офлайн
Да понимаете спасибо за ответ за время потраченной тут проблема насоколько я понимаю в том как передать параметры длл на С++ сделана ,
Офлайн
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)
Отредактировано (Дек. 25, 2011 13:10:04)
Офлайн
да здесь моя опечатка со входными исходными значения спасибо за ответ очень благодарен , 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 буду разбираться спс за помощь ответы жду комментариев
Офлайн
я так понимаю что ему не нравятся аргументы в вызове
Офлайн
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 нельзя использовать=)))))))))
я конечно понимаю что скорей всего я опечатася в названии функции но я пробовал разные варинаты а он ругаеться !!
Офлайн
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)
Офлайн
тут я вызываю длл не редактируемую которая как исходная
попробовал заменит функцию 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
непонятный зверь
Офлайн
Похоже вы прыгаете по директориям, а явного пути к dll не указали. В этом случае у вас после каждого чиха может перестать грузиться dll. Пути опять у вас неправильно указаны нужны двойные слеши. d1=np.zeros(5,dtype='d') 5 я указал для примера - вам надо выяснить какого размера ожидаются области памяти и проч и проч…
Если вам срочно нужно - попросите нормального питонщика какого - да вышлите ему код полностью чтоб вам собрал вызов функции из dll.
Офлайн