Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Появилась идея? Обсуди ее на форуме трейдеров!
Pirat
251
Pirat 2010.12.17 00:13 

Здравствуйте уважаемые форумчане. Столкнулся вот с такой проблемой

Хочу перевести часть кода в dll, длл пишу на C++ M.Visual 2010.

Но почему не получайся, помогите понять в чем проблема.

Часть кода из mq4

#import "mydll.dll"
   double Func (double Lvalue, double Multi, double LD);
#import

extern double Lvalue = 0.1;
extern double Multi = 2.0;
double LD = 2.0;


+++++++++++++++++

double Lot = Func (Lvalue, Multi, LD);

Весь код из .dll

// mydll.cpp: определяет экспортированные функции для приложения DLL.
//

#include "StdAfx.h"


const double ExtDecimalArray[9] ={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0,  10000000.0, 100000000.0 };

// NormalizeDouble

double NormalizeDouble(const double val, int digits)
  {
//---
   if(digits<0) digits=0;
   if(digits>8) digits=8;
//---
   double rem,p=ExtDecimalArray[digits];
   double integer=double(__int64(val));
   double rem2=val-integer;
//---
   if(val>0) rem=double(__int64(rem2*p+0.5))/p;
   else      rem=double(__int64(rem2*p-0.5))/p;
//---
   return(integer+rem);
  }

// Сомнения на счет Func, то что выше взял с форума

double Func(double Lvalue, double Multi, double LD) {

        return (NormalizeDouble(Lvalue * Multi, LD));

}

Заранее спасибо за помощь.

Андрей
1890
Андрей 2010.12.17 00:28  

C:\Program files\MetaTrader\experts\samples\DLLSample\ExpertSample.cpp
C:\Program files\MetaTrader\experts\samples\DLLSample\ExpertSample.def 

Pirat
251
Pirat 2010.12.17 15:19  

Переписал длл, но всё равно не работает, помогите понять в чем проблема.

//+------------------------------------------------------------------+
//|                                              Sample DLL for MQL4 |
//|                 Copyright © 2004-2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
#include "stdafx.h"
#include "StdString.h"


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <math.h>
//----
#define MT4_EXPFUNC __declspec(dllexport)


const double ExtDecimalArray[9] ={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0,  10000000.0, 100000000.0 };

// NormalizeDouble

MT4_EXPFUNC double __stdcall NormalizeDouble(const double val, int digits)
  {
//---
   if(digits<0) digits=0;
   if(digits>8) digits=8;
//---
   double rem,p=ExtDecimalArray[digits];
   double integer=double(__int64(val));
   double rem2=val-integer;
//---
   if(val>0) rem=double(__int64(rem2*p+0.5))/p;
   else      rem=double(__int64(rem2*p-0.5))/p;
//---
   return(integer+rem);
  }

// Сомнения на счет Func, то что выше взял с форума

MT4_EXPFUNC double __stdcall Func(double Lvalue, double Multi, double LD) {

        return (NormalizeDouble(Lvalue * Multi, LD));

}
techno
1226
techno 2010.12.17 15:22  
не получается в каком плане, не компилируется или что?
Андрей
1890
Андрей 2010.12.17 15:23  
Переписывать не надо. Возьмите запустите для начала пример работающий.
Pirat
251
Pirat 2010.12.17 15:23  
Компилируется, в метатрейдере выдает ошибку, что не может вызвать функцию Func
Андрей
1890
Андрей 2010.12.17 15:25  
Func прописана в def файле? def файл прописан в проекте?
Pirat
251
Pirat 2010.12.17 15:25  
2010.12.17 16:23:46 2010.12.06 00:00 MyExp EURUSD,M5: cannot call function 'Func' from dll 'mydll.dll' (error 127)
Pirat
251
Pirat 2010.12.17 15:26  
я с def не работал, только с .cpp
Pirat
251
Pirat 2010.12.17 15:28  
Если нужно что-то прописывать в def, то для моего примера что нужно записать туда? И .def нужно где-то обозначать?
Andrei
2383
Andrei 2010.12.17 15:28  
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий