Скачать MetaTrader 5

Проблема с Dll

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114299
Forex Trader  
Подскажите отчего сожет быть такое пытаюсь сохранить историю показаний индюка в базу для анализа. тест индюка:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Gold
#import "forex.dll"
int SaveData(datetime time,double Value,double Opens,double Closes,double Lows,double Hight,double Up);


double ExtMapBuffer1[];
double ExtMapBuffer2[];

extern int depth=15;
extern int deviation=5;
extern int backstep=3;

int shift,lasthighpos,lastlowpos;
int back;
extern int StartBar=600;
double val,curlow,curhigh,lasthigh,lastlow,res,llastValue,hlastValue,llastClose,hlastClose,hlastTime,llastTime,hlastOpen,llastOpen,hlastLow,llastLow,hlastHight,llastHight,FLow=0,FHight=0;



//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,241);
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,242);
SetIndexEmptyValue(1,0.0);
SetIndexBuffer(1,ExtMapBuffer2);

return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
lasthigh=-1;
lastlow=-1;
StartBar = MathMin(600,Bars-300);
for(shift=StartBar;shift>=0;shift--){
//--- low
val=Low[Lowest(NULL,0,MODE_LOW,depth,shift)];//+depth-1
if(val==lastlow){
val=0;
}
else{
lastlow=val;
if(Low[shift]-val>deviation*Point){
val=0;
}
else{
for(back=1;back<=backstep;back++){
res=ExtMapBuffer1[shift+back];
if(res!=0 && res>val){
ExtMapBuffer1[shift+back]=0;
}
}
}
}
ExtMapBuffer1[shift]=val; if(val>0) {FLow=1;FHight=0;}
//--- high
val=High[Highest(NULL,0,MODE_HIGH,depth,shift)];//+depth-1
if(val==lasthigh){
val=0;
}
else{
lasthigh=val;
if (val-High[shift]>deviation*Point){
val=0;
}
else{
for(back=1;back<=backstep;back++){
res=ExtMapBuffer2[shift+back];
if(res!=0 && res<val){
ExtMapBuffer2[shift+back]=0;
}
}
}
}
ExtMapBuffer2[shift]=val;if(val>0) {FHight=1;FLow=0;}
}
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=StartBar;shift>=0;shift--){
curlow=ExtMapBuffer1[shift];
curhigh=ExtMapBuffer2[shift];
if(curlow==0 && curhigh==0){
continue;
}
if(curhigh!=0){
if(lasthigh>0){
if(lasthigh<curhigh){
ExtMapBuffer2[lasthighpos]=0;
SaveData(Time[shift],Volume[shift],Open[shift],Close[shift],Low[shift],High[shift],0);

}
else{
ExtMapBuffer2[shift]=0;
SaveData(Time[lasthighpos],Volume[lasthighpos],Open[lasthighpos],Close[lasthighpos],Low[lasthighpos],High[lasthighpos],0);
}
}
if(lasthigh<curhigh){
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
if(curlow!=0){
if(lastlow>0){
if(lastlow>curlow){
ExtMapBuffer1[lastlowpos]=0;
SaveData(Time[shift],Volume[shift],Open[shift],Close[shift],Low[shift],High[shift],1);
}
else{
ExtMapBuffer1[shift]=0;
SaveData(Time[lastlowpos],Volume[lastlowpos],Open[lastlowpos],Close[lastlowpos],Low[lastlowpos],High[lastlowpos],1);
}
}
//---
if(curlow<lastlow || lastlow<0){
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}

for(shift=StartBar;shift>=0;shift--){
res=ExtMapBuffer2[shift];
if(res!=0){
ExtMapBuffer2[shift]=res;
}
}
return(0);
}
текст dll в делфи

uses
SysUtils,ibdatabase,ibquery,ibtable,
Classes;
var
ibdatabase1:Tibdatabase;
ibtransaction1:tibtransaction;
ibtable1,ibtable2:tibtable;
{$R *.res}

Function SaveData(time:TDateTime;Value,Open,Close,Low,Hight,Up:real):integer ; stdcall;
Begin
try
IBDatabase1:= TIBDatabase.Create(nil);
IBTransaction1:= TIBTransaction.Create(nil);
IBDatabase1.DefaultTransaction:=IBTransaction1;
IBTransaction1.DefaultDatabase:=IBDatabase1;
ibdatabase1.Params.Add('USER_NAME=SYSDBA');
ibdatabase1.Params.Add('PASSWORD=masterkey');
ibdatabase1.Params.Add('lc_ctype=WIN1251');
ibdatabase1.DatabaseName:='C:\forex.gdb';
ibdatabase1.LoginPrompt:=false;
try
ibdatabase1.Connected:=true;
except
end;
ibtable1:= TIBTable.Create(nil);
ibtable1.Database:=Ibdatabase1;
//ibquery1:= TIBQuery.Create(nil);
//ibup:=TIbUpdateSql.Create(nil);
//DataSource1:=TdataSource.Create(nil);
//DataSource1.DataSet:=ibquery1;
ibtable1.Active:=false;
ibtable1.TableName:='History';
ibtable1.Active:=true;
ibtable1.FieldByName('TimeH').AsDateTime:=time;
ibtable1.FieldByName('Val').AsFloat:=Value;
ibtable1.FieldByName('Open').AsFloat:=Open;
ibtable1.FieldByName('Close').AsFloat:=Close;
ibtable1.FieldByName('Low').AsFloat:=Low;
ibtable1.FieldByName('Hight').AsFloat:=Hight;
ibtable1.FieldByName('Up').AsFloat:=Up;
ibtable1.Post;
ibtransaction1.CommitRetaining;
Finally
ibtable1.Free;

ibdatabase1.Free;
ibtransaction1.Free;
result:=1;
end;
End;

Exports SaveData;
Begin

end.
При поключении вылетает отчет об ошибке и МТ закрывается!
MetaQuotes Software Corp.
Модератор
190254
MetaQuotes Software Corp.  
А перед вылетом показывается крешлог?
Если да, то выложите его в форуме, пожалуйста.
Forex Trader
114299
Forex Trader  
А перед вылетом показывается крешлог?
Если да, то выложите его в форуме, пожалуйста.

There has been a critical error
Time : 2006.03.01 13:57
Program : Client Terminal
Version : 4.00 (build: 190, 6 Feb 2006)
Owner : Straighthold Investment Group, Inc. (Straighthold Trader)
OS : Windows 2003 Domain Controller 5.2 (Build 3790)
Processors : 2, type 586, level 15
Memory : 1048044/418892 kb
Exception : 0EEDFADE
Address : 77E649D3
Access Type : NA
Access Addr : 00000000

Registers : EAX=0012A384 CS=001b EIP=77E649D3 EFLGS=00000202
: EBX=00000002 SS=0023 ESP=0012A380 EBP=0012A3D4
: ECX=00000000 DS=0023 ESI=0012A408 FS=003b
: EDX=01C2C872 ES=0023 EDI=14000018 GS=0000

Stack Trace : 01C2C872 01C3E61E 01C1D488 01C34D9D
: 00452B2A 0045CC27 0044FE35 00E4BA18
: 0047E0D0 BE8D016A 00000000 00000000
: 00000000 00000000 00000000 00000000
Modules :
1 : 00400000 00285000 C:\Program Files\Straighthold Trader\terminal.exe
2 : 01BF0000 00066000 C:\WINDOWS\system32\forex.dll
3 : 10000000 0005C000 C:\WINDOWS\system32\gds32.dll
4 : 70AD0000 000E6000 C:\WINDOWS\WinSxS\X86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.100.0_x-ww_8417450B\COMCTL32.dll
5 : 71AE0000 00008000 C:\WINDOWS\System32\wshtcpip.dll
6 : 71B20000 00043000 C:\WINDOWS\system32\mswsock.dll
7 : 71B70000 00033000 C:\WINDOWS\system32\UxTheme.dll
8 : 71BD0000 00011000 C:\WINDOWS\system32\MPR.dll
9 : 71BF0000 00008000 C:\WINDOWS\system32\WS2HELP.dll
10 : 71C00000 00018000 C:\WINDOWS\system32\WS2_32.dll
11 : 71C20000 00011000 C:\WINDOWS\system32\tsappcmp.dll
12 : 71C40000 00053000 C:\WINDOWS\system32\netapi32.dll
13 : 73D20000 000F3000 C:\WINDOWS\system32\MFC42.DLL
14 : 744F0000 0004B000 C:\WINDOWS\system32\MSCTF.dll
15 : 75FC0000 00089000 C:\WINDOWS\system32\urlmon.dll
16 : 76280000 00005000 C:\WINDOWS\system32\MSIMG32.dll
17 : 762B0000 00047000 C:\WINDOWS\system32\comdlg32.dll
18 : 765A0000 00100000 C:\WINDOWS\system32\SETUPAPI.dll
19 : 76AA0000 0002C000 C:\WINDOWS\system32\WINMM.dll
20 : 76F50000 00013000 C:\WINDOWS\system32\Secur32.dll
21 : 76F90000 0007E000 C:\WINDOWS\system32\CLBCatQ.DLL
22 : 77010000 000C6000 C:\WINDOWS\system32\COMRes.dll
23 : 770E0000 0007D000 C:\WINDOWS\system32\OLEAUT32.dll
24 : 77160000 00124000 C:\WINDOWS\system32\ole32.dll
25 : 77290000 00049000 C:\WINDOWS\system32\SHLWAPI.dll
26 : 77380000 007DD000 C:\WINDOWS\system32\SHELL32.dll
27 : 77B90000 00008000 C:\WINDOWS\system32\VERSION.dll
28 : 77BA0000 00054000 C:\WINDOWS\system32\msvcrt.dll
29 : 77C00000 00044000 C:\WINDOWS\system32\GDI32.dll
30 : 77C50000 000A4000 C:\WINDOWS\system32\RPCRT4.dll
31 : 77D00000 0008F000 C:\WINDOWS\system32\USER32.dll
32 : 77DA0000 00090000 C:\WINDOWS\system32\ADVAPI32.dll
33 : 77E40000 000F4000 C:\WINDOWS\system32\kernel32.dll
34 : 77F40000 000BA000 C:\WINDOWS\system32\ntdll.dll
35 : 780C0000 00061000 C:\WINDOWS\system32\MSVCP60.dll

Call stack :
77E6498B:0048 [77E649D3] RaiseException [C:\WINDOWS\system32\kernel32.dll]
004524C0:066A [00452B2A] ?CallDllFunction@CExpertInterior
00459070:3BB7 [0045CC27] ?ExecuteStaticAsm@CExpertInterior
0044FCF0:0145 [0044FE35] ?RunExpertInt@CExpertInterior
0047E0D0:0000 [0047E0D0] ?Name@CIndCustom
Forex Trader
114299
Forex Trader  

Call stack :
77E6498B:0048 [77E649D3] RaiseException [C:\WINDOWS\system32\kernel32.dll]
004524C0:066A [00452B2A] ?CallDllFunction@CExpertInterior
00459070:3BB7 [0045CC27] ?ExecuteStaticAsm@CExpertInterior
0044FCF0:0145 [0044FE35] ?RunExpertInt@CExpertInterior
0047E0D0:0000 [0047E0D0] ?Name@CIndCustom

Внутри Вашей dll-функции было сгенерировано необрабатываемое исключительное состояние (unhandled exception)
Forex Trader
114299
Forex Trader  

Call stack :
77E6498B:0048 [77E649D3] RaiseException [C:\WINDOWS\system32\kernel32.dll]
004524C0:066A [00452B2A] ?CallDllFunction@CExpertInterior
00459070:3BB7 [0045CC27] ?ExecuteStaticAsm@CExpertInterior
0044FCF0:0145 [0044FE35] ?RunExpertInt@CExpertInterior
0047E0D0:0000 [0047E0D0] ?Name@CIndCustom

Внутри Вашей dll-функции было сгенерировано необрабатываемое исключительное состояние (unhandled exception)

Всмысле нельзя применять обработку исключений?
Forex Trader
114299
Forex Trader  

Внутри Вашей dll-функции было сгенерировано необрабатываемое исключительное состояние (unhandled exception) [/quote]
Всмысле нельзя применять обработку исключений? [/quote]
Нужно применять. А Вы не применили.
Forex Trader
114299
Forex Trader  

Внутри Вашей dll-функции было сгенерировано необрабатываемое исключительное состояние (unhandled exception)

Всмысле нельзя применять обработку исключений? [/quote]
Нужно применять. А Вы не применили. [/quote]
Я же вам текст привел функции длл try finally - заключено...
Forex Trader
114299
Forex Trader  

Нужно применять. А Вы не применили.

Я же вам текст привел функции длл try finally - заключено...

Очень сложно читать неформатированные исходные тексты размером более 20 строк. Поэтому и не увидел Ваш try ... finally.
Во-первых, используйте тег code для оформления исходных текстов.
Во-вторых, попробуйте обратиться к дельфистам.
В-третьих, запустите отладку Вашей dll, уверяю Вас проблема видна невооружённым глазом

77E6498B:0048 [77E649D3] RaiseException [C:\WINDOWS\system32\kernel32.dll]
004524C0:066A [00452B2A] ?CallDllFunction@CExpertInterior

В функции CallDllFunction мы не генерируем никаких исключительных ситуаций. Мы их вообще не генерируем.
Возможно, Вам поможет код эксепшена 0EEDFADE в поисках ошибки.
Forex Trader
114299
Forex Trader  
Первая причина приодалена не внимательность просто, теперь вопрос такой передаваемые значения не типизируеться я пытаюсь передать дату как дату например, и принять ее как дату мне приходит непонятный набор цифр , тоже с другими значениями.
Forex Trader
114299
Forex Trader  
В нашей системе принято понятие юникс-даты, то есть дата - это количество секунд, прошедшее с 0 часов 1 января 1970 года
Forex Trader
114299
Forex Trader  
В нашей системе принято понятие юникс-даты, то есть дата - это количество секунд, прошедшее с 0 часов 1 января 1970 года
то есть передавать значение с типом int? А как тогда с типом double там тоже передается нечто?
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий