Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Заведи торговый сигнал. Зарабатывай на платной подписке!
dmitriy
250
dmitriy 2014.02.07 17:30 

не компилируеться dll (

ExpertSample.cpp

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(218): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

c:\program files\microsoft visual studio 10.0\vc\include\string.h(110): см. объявление "strcat"

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(239): error C3861: RefreshRates: идентификатор не найден

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(240): error C2065: MODE_ASK: необъявленный идентификатор

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(240): error C3861: MarketInfo: идентификатор не найден

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(240): error C3861: Symbol: идентификатор не найден

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(241): error C2065: MODE_BID: необъявленный идентификатор

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(241): error C3861: MarketInfo: идентификатор не найден

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(241): error C3861: Symbol: идентификатор не найден

c:\documents and settings\nod.d530b5b5729b406\рабочий стол\dllsample\expertsample.cpp(243): error C3861: NormalizeDouble: идентификатор не найден


СБОЙ построения.

как это можно решить..

в моей функции подчеркнут RefreshRates(); красным цветом..

хотя добавил функцию в стандартный DLLSample

Vadim Zhunko
5221
Vadim Zhunko 2014.02.07 18:14  
Это, что, код MQL в студии решили компилировать?! :-) Круто!
dmitriy
250
dmitriy 2014.02.07 18:33  
нет. пытаюсь добавить функцию в dll
Vadim Zhunko
5221
Vadim Zhunko 2014.02.07 18:41  
Код где?
dmitriy
250
dmitriy 2014.02.07 18:46  
//+------------------------------------------------------------------+
//|                                              Sample DLL for MQL4 |
//|                   Copyright 2001-2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
//---
#define MT4_EXPFUNC __declspec(dllexport)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#pragma pack(push,1)
struct RateInfo
  {
   unsigned int      ctm;
   double            open;
   double            low;
   double            high;
   double            close;
   double            vol;
  };
#pragma pack(pop)
//---
struct MqlStr
  {
   int               len;
   char             *string;
  };
static int CompareMqlStr(const void *left,const void *right);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
  {
//---
   switch(ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
//---
   return(TRUE);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC int __stdcall GetIntValue(const int ipar)
  {
   printf("GetIntValue takes %d\n",ipar);
   return(ipar);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC double __stdcall GetDoubleValue(const double dpar)
  {
   printf("GetDoubleValue takes %.8lf\n",dpar);
   return(dpar);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)
  {
   printf("GetDoubleValue takes \"%s\"\n",spar);
   return(spar);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC double __stdcall GetArrayItemValue(const double *arr,const int arraysize,const int nitem)
  {
//---
   if(arr==NULL)
     {
      printf("GetArrayItemValue: NULL array\n");
      return(0.0);
     }
   if(arraysize<=0)
     {
      printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize);
      return(0.0);
     }
   if(nitem<0 || nitem>=arraysize)
     {
      printf("GetArrayItemValue: wrong item number (%d)\n", nitem);
      return(0.0);
     }
//---
   return(arr[nitem]);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC BOOL __stdcall SetArrayItemValue(double *arr,const int arraysize,const int nitem,const double value)
  {
//---
   if(arr==NULL)
     {
      printf("GetArrayItemValue: NULL array\n");
      return(FALSE);
     }
   if(arraysize<=0)
     {
      printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize);
      return(FALSE);
     }
   if(nitem<0 || nitem>=arraysize)
     {
      printf("GetArrayItemValue: wrong item number (%d)\n", nitem);
      return(FALSE);
     }
//---
   arr[nitem]=value;
   return(TRUE);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC double __stdcall GetRatesItemValue(const RateInfo* rates,const int rates_total,const int shift,const int nrate)
  {
//---
   if(rates==NULL)
     {
      printf("GetRatesItemValue: NULL array\n");
      return(0.0);
     }
//---
   if(rates_total<0)
     {
      printf("GetRatesItemValue: wrong rates_total number (%d)\n", rates_total);
      return(0.0);
     }
//---
   if(shift<0 || shift>=rates_total)
     {
      printf("GetRatesItemValue: wrong shift number (%d)\n", shift);
      return(0.0);
     }
//---
   if(nrate<0 || nrate>5)
     {
      printf("GetRatesItemValue: wrong rate index (%d)\n", nrate);
      return(0.0);
     }
//---
   int nitem=rates_total-1-shift;
   switch(nrate)
     {
      case 0: return double(rates[nitem].ctm);
      case 1: return rates[nitem].open;
      case 2: return rates[nitem].low;
      case 3: return rates[nitem].high;
      case 4: return rates[nitem].close;
      case 5: return rates[nitem].vol;
     }
//---
   return(0.0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC int __stdcall SortStringArray(MqlStr *arr,const int arraysize)
  {
//---
   if(arr==NULL)
     {
      printf("SortStringArray: NULL array\n");
      return(-1);
     }
   if(arraysize<=0)
     {
      printf("SortStringArray: wrong arraysize (%d)\n", arraysize);
      return(-1);
     }
//---
   qsort(arr,arraysize,sizeof(MqlStr),CompareMqlStr);
//---
   return(arraysize);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MT4_EXPFUNC int __stdcall ProcessStringArray(MqlStr *arr,const int arraysize)
  {
   int   len1,len2;
//---
   if(arr==NULL)
     {
      printf("ProcessStringArray: NULL array\n");
      return(-1);
     }
   if(arraysize<=0)
     {
      printf("ProcessStringArray: wrong arraysize (%d)\n", arraysize);
      return(-1);
     }
//---
   for(int i=0; i<arraysize-1; i++)
     {
      if(arr[i].string==NULL) len1=0;
      else len1=strlen(arr[i].string);
      if(arr[i+1].string==NULL) len2=0;
      else len2=strlen(arr[i+1].string);
      //--- uninitialized string
      if(arr[i+1].string==NULL) continue;
      //--- destination string is uninitialized and cannot be allocated within dll
      if(arr[i].string==NULL)   continue;
      //--- memory piece is less than needed and cannot be reallocated within dll
      if(arr[i].len<len1+len2)  continue;
      //--- final processing
      strcat(arr[i].string,arr[i+1].string);
     }
//---
   return(arraysize);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CompareMqlStr(const void *left,const void *right)
  {
   MqlStr *leftstr=(MqlStr *)left;
   MqlStr *rightstr=(MqlStr *)right;
//---
   if(leftstr->string==NULL) return(-1);
   if(rightstr->string==NULL) return(1);
//---
   return(strcmp(leftstr->string,rightstr->string));
  }
//+------------------------------------------------------------------+
MT4_EXPFUNC double __stdcall Fun_Sp()
     {
     RefreshRates();
     double bid=MarketInfo(Symbol(),MODE_BID);
     int mnogitel=10000;
     double sp=NormalizeDouble(bid*mnogitel,1);
     return(sp);
     }
dmitriy
250
dmitriy 2014.02.07 18:47  
MT4_EXPFUNC double __stdcall Fun_Sp()
     {
     RefreshRates();
     double bid=MarketInfo(Symbol(),MODE_BID);
     int mnogitel=10000;
     double sp=NormalizeDouble(bid*mnogitel,1);
     return(sp);
     }
вот эта функция не компилируеться9 что надо добавить и где хз( и как тогда добавлять свои функции в dll если они не компилються(
Ihor Herasko
8470
Ihor Herasko 2014.02.07 19:38  
Вы пытаетесь использовать функции MQL4 в С++. Конечно, не будет компилироваться. Приведенный код следует использовать именно в MQL4, а не в C++. И без MT4_EXPFUNC.
dmitriy
250
dmitriy 2014.02.07 19:50  
стоп. а как тогда функции туда добовляют а потом к советнику крепят????
Ihor Herasko
8470
Ihor Herasko 2014.02.07 20:02  
tehpp:
стоп. а как тогда функции туда добовляют а потом к советнику крепят????


Всё пишется на С++, используя его функционал. В MQL4 описываются только импортируемые функции. Затем уже в коде MQL4 используются функции, написанные в DLL.

Исходник, который Вы привели, компилируете в VS. Затем располагаете полученную dll в папке libraries терминала. А в коде MQL4 описываете (этот пример есть в папке samples\include):

#import "ExpertSample.dll"
int    GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
double GetArrayItemValue(double arr[],int,int);
bool   SetArrayItemValue(double& arr[],int,int,double);
double GetRatesItemValue(double rates[][6],int,int,int);
int    SortStringArray(string& arr[],int);
int    ProcessStringArray(string& arr[],int);
dmitriy
250
dmitriy 2014.02.07 20:25  

так на каком языке функции т писать в с++ чтоб в mql4 читались...

мне нужно добавить функцию в мой dll

как её на с++ переписывать то?? и как её потом советник поймет

     double Fun_Sp()
     {
     RefreshRates();
     double bid=MarketInfo(Symbol(),MODE_BID);
     int mnogitel=10000;
     double sp=NormalizeDouble(bid*mnogitel,1);
     return(sp);
     }
Ihor Herasko
8470
Ihor Herasko 2014.02.07 21:04  
tehpp:

так на каком языке функции т писать в с++ чтоб в mql4 читались...

мне нужно добавить функцию в мой dll

как её на с++ переписывать то?? и как её потом советник поймет


В MQL4 функции не будут "читаться". Их нужно вызывать, использовать.

Попробуйте почитать об этом здесь - https://www.mql5.com/ru/articles/18. Возможно, немного проясните для себя, что к чему.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий