Найти - Пользователи
Полная версия: DLL ctypes Вызов функции с параметрами HELP
Начало » Центр помощи » DLL ctypes Вызов функции с параметрами HELP
1 2 3
doza_and
2rei
WindowsError: exception: access violation reading 0x00000064
см пост выше - посмотрите сколько вам памти надо в указателях
например сделайте
d1=np.zeros(500000,dtype='d')
А лучше всего гляньте сишным отладчиком где оно валится.
2rei
вот нашел автор подключаеться к данному длл через какой то софт и берет значения и возвращает
#import “NeuroSolutionsAdapter.dll”
int CalcNeuralNet(string dllPath, string weightsPath, double& inputs, double& outputs);
#import
//+——————————————————————+
class CNeuroSolutionsNeuralNet
{
private:
string dllPath; // Путь к DLL-нейрости, созданной в NeuroSolutions
string weightsPath; // Путь к файлу весов сети
public:
double in; // Входы сети - OHLC 5 баров
double out; // Выход сети - Close текущего бара

CNeuroSolutionsNeuralNet();
bool Calc();
};
//+——————————————————————+
void CNeuroSolutionsNeuralNet::CNeuroSolutionsNeuralNet()
{
string terminal = TerminalInfoString(TERMINAL_PATH);
dllPath = terminal + “\\MQL5\\Files\\NeuroSolutions\\WeekPattern.dll”;
weightsPath = terminal + “\\MQL5\\Files\\NeuroSolutions\\WeekPattern.nsw”;
}
//+——————————————————————+
bool CNeuroSolutionsNeuralNet::Calc()
{
// Получим текущие котировки для нейросети
MqlRates rates, rate;
CopyRates(Symbol(), Period(), 0, 6, rates);
ArraySetAsSeries(rates, true);

// Заполним массив входных данных нейросети
double zlevel=0;
for (int bar=0; bar<=5; bar++)
{
rate = rates;
// 0-й бар на вход сети не идет
if (bar==0) zlevel=rate.open; // уровень отсчета цен
// 1-5 бары идут на вход сети
else
{
int i=(bar-1)*4; // номер входа
in = rate.open -zlevel;
in = rate.high -zlevel;
in = rate.low -zlevel;
in = rate.close-zlevel;
}
}

// Проведем расчет сети в DLL NeuroSolutions (через DLL-переходник)
int res = CalcNeuralNet(dllPath, weightsPath, in, out);
switch (res)
2rei
все я вообщем извиняюсь я не до конца понял структура этого длл все разобрался щас расскажу как что у меня поучаеться теоретически мне нужно задать в этот длл dllpath и weightsPath тоесть пути до моих файлов .
дальше тут есть строчка
CalcNeuralNet(dllPath, weightsPath, in, out);
где сооотвестенно вызываютсья все эти функции, можно же в ней задать все свою параметры и она подгрузить сразу, где dllPath путь до длл которую подгружать, weightsPath путь до весо которые подгружать , in те значения которые можно будеь прогнать на ней (пока зададим какой нить число или патом массив сделаем нада понять как она будеть прогонять), out выход тоесть значение которе буде получено после прогонаи оно должно быть возвращено я пока не понял как это сделать
тоесть мне по сути нада вызвать из длл одну функцию а не подгружать каждую изменять
которая вернеть мне значение out/
но при попытке вызыва CalcNeuralNet
тоесть в длл написано extern “C” __declspec(dllexport) int __stdcall CalcNeuralNet(
LPCWSTR dllPath_u, LPCWSTR weightsPath_u,
double* inputs, double* outputs)
по идеи функци подлежить вызовы извне
но при попытки вызова проста без параметров он срау пишет что не может найти
from ctypes import *
lib=cdll.DLLM
lib.CalcNeuralNet
AttributeError: function ‘CalcNeuralNet’ not found
2rei
ххехехе пишу
AD=windll.NeuroSolutionsAdapter
AD.CalcNeuralNet
<_FuncPtr object at 0x03090A80>
ларчик открылся походу щас буду пробовать=))))))
2rei
пришел к следующему

from ctypes import *
AD=windll.NeuroSolutionsAdapter
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(500000,dtype='d')
d2=np.zeros(500000,dtype='d')
d3=np.zeros(500000,dtype='int16')
d4=np.zeros(500000,dtype='int32')
out=0
inp=0.01
AD.CalcNeuralNet(dllpath,weightsPath, inp,out, d1.ctypes.data,d2.ctypes.data,d3.ctypes.data,d4.ctypes.data)
ArgumentError: argument 3: <type ‘exceptions.TypeError’>: Don't know how to convert parameter 3
Уважаемы питонеры посмторите где та я наврал не то задал
2rei
in по идеи значения скалярные с запятой out тоже
2rei
AD.CalcNeuralNet(dllpath,weightsPath,inp,out,d1.ctypes.data,d2.ctypes.data ,d3.ctypes.data, d4.ctypes.data)
исправил точки запятые все равно выдает
ArgumentError: argument 3: <type ‘exceptions.TypeError’>: Don't know how to convert parameter 3
2rei
from ctypes import *
AD=windll.NeuroSolutionsAdapter
x=“C:\Python27\DLL1\DLLM.nsw”
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(5000000,dtype='d')
d2=np.zeros(5000000,dtype='d')
d3=np.zeros(5000000,dtype='int16')
d4=np.zeros(5000000,dtype='int16')
out='0'
inp='0.01,0.02'
AD.CalcNeuralNet(dllpath,weightsPath,inp,out)
написал так вроде ошибок не выдал =)))))) без data.types
теперь нада вернуть значение out чтоб проверить работает функция или нет ===)))))
2rei
from ctypes import *
AD=windll.NeuroSolutionsAdapter
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
import numpy as np
d1=np.zeros(5000000,dtype='d')
d2=np.zeros(5000000,dtype='d')
d3=np.zeros(5000000,dtype='int16')
d4=np.zeros(5000000,dtype='int16')
out='0'
inp='0.05'
print “inp vxod” + inp
weightsPath= u“C:\Python27\DLL1\DLLM.nsw”
dllpath=u“C:\Python27\DLL1\DLLM.dll”
res =AD.CalcNeuralNet(dllpath,weightsPath,inp,out)
print “out=” +out ,“inp=” +inp
результат
inp vxod0.05
out=P inp=0.05
подаем на вход 0.05 на выходе буква Проста крута!!!!!
наверна это из за того что типы не указаны ? жду комментариев!

inp vxod1,1
out= точка какаято inp=1,1


беда она вообще не работает!!!!!!! беда!!
doza_and
:)
2rei
жду комментариев!
2rei
беда она вообще не работает!!!!!!! беда!!
Кажется вам не в форум надо писать а снять фильм ужасов - борьба с питоном - он меня душит.
Напишите прототип на c++, судя по описанию проблемам это сильно вам поможет. Потом сделаете на питоне тоже но другими словами.
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