Thema: dll Frage
Einzelnen Beitrag anzeigen
  #12 (permalink)  
Alt 05.01.16
yytrader yytrader ist offline
Mitglied
 
Registriert seit: May 2015
Beiträge: 124
yytrader befindet sich auf einem aufstrebenden Ast
Standard

Hallo CashDigger,

wenn du die Funktion ArrayCopyRates verwendest, wird keine Matrix, sondern ein Strukt übergeben.

anbei der Code:
Code:
#import "Project1.dll"
double GetRatesItemValue(MqlRates &rates[],int);
int SingleArray(double &a[], int &b[]);
#import

int init()
{
   int retValue;
   double a[10]={2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
   int b[10]={1,2,3,4,5,6,7,8,9};
   
   retValue = SingleArray(a, b); 
   Print("SingleArray: retValue:",retValue," a:",a[0]," ",a[1]," ",a[2]," ",a[3]," ",a[4]);
   
   
   int selection = 1;
    MqlRates rates[];
   ArrayCopyRates(rates,NULL,0);
   Print("GetRatesItemValue:",GetRatesItemValue(rates,selection));
   
   return(0);
}
Code:
struct RateInfo
  {
   __int64           ctm;
   double            open;
   double            low;
   double            high;
   double            close;
   unsigned __int64  vol_tick;
   int               spread;
   unsigned __int64  vol_real;
  };
  
__declspec (dllexport) double GetRatesItemValue(const struct RateInfo* rates, const int typeSelect)
  {
   switch(typeSelect)
   {
      case 0: return rates[0].ctm;
      case 1: return rates[0].open;
      case 2: return rates[0].low;
      case 3: return rates[0].high;
      case 4: return rates[0].close;
      
      
      default:
              return -1.0;
   }
}

Wenn die Werte aktualisiert werden sollen, dann musst du diese Funktion in OnTick aufrufen, da so immer die neuesten Werte verwendet werden. Ich verwende immer nur init zum testen, da es so nur einmal und sofort ausgeführt wird.


Gruß

yytrader