C ++ и MQL4 Не удается найти функцию в DLL

Хорошо, я знаю, что все думают: «На это уже отвечали несколько раз». Ну, вы не правы. Это время другое. Я попробовал все эти другие ответы. Итак, вот ситуация.

Я создаю индикатор в Metatrader 4 (код MQL4). Я кодирую DLL для выполнения расчетов в Visual Studio 2013 в C ++.
Подходящий MQL4 #import код является:

#import  "test.dll"bool  LiveChart( BarTrack &bars,
Stars    &points,
Patterns &gartleys[],
Patterns &bats[],
Patterns &butterflies[],
Patterns &cyphers[],
BarData  &rates[],
Basics   &basics
);
#import

и вызов функции в OnCalculate() функция:

     bool test = LiveChart( bars,
points,
gartleys,
bats,
butterflies,
cyphers,
rates,
basics
);
Print( "test: ", test );

ПРИМЕЧАНИЕ. Все переданные аргументы struct-Рекомендации. Ни одна из структур не содержит объектов, указателей, ссылок, строк, других структур, классов, методов или массивов. Некоторые из структур являются массивами, но это вполне допустимо в качестве переданного аргумента. Таким образом, нет НИКАКИХ недопустимых аргументов. я проверил что каждый struct проходит успешно, на индивидуальной основе.

Теперь код C ++:

#define WIN32_LEAN_AND_MEAN
#include "stdafx.h"#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC bool __stdcall LiveChart(const BarTrack &bars, Stars &points, Patterns *gartleys, Patterns *bats,
Patterns *butterflies, Patterns *cyphers, const BarData *rates, Basics &basics)
{
Observatory astronomer;

return astronomer.OnCalculateLive(bars, points, gartleys, bats, butterflies, cyphers, rates, basics);
}

ПРИМЕЧАНИЕ: я также попробовал:

extern "C"{
MT4_EXPFUNC bool __stdcall LiveChart(const BarTrack &bars, Stars &points, Patterns *gartleys, Patterns *bats,
Patterns *butterflies, Patterns *cyphers, const BarData *rates, Basics &basics)
{
Observatory astronomer;

return astronomer.OnCalculateLive(bars, points, gartleys, bats, butterflies, cyphers, rates, basics);
}
}

В моем файле определения:

LIBRARY test

EXPORTS
LiveChart

Я рассмотрел код с Зависимость Уокер программа. Это говорит мне, что имя функции:

bool LiveChart(struct BarTrack const &,struct Stars &,struct Patterns *,struct Patterns *,struct Patterns *,struct Patterns *,struct BarData const *,struct Basics &)

Насколько я понимаю, все так и должно быть.

Мой вопрос,

  1. Почему MetaTrader до сих пор говорят, что не может найти
    имя функции в dll?

  2. Я что-то упустил?

  3. Я использую неправильный тип вуду?

  4. Звезды не выровнены правильно?

Правда, я все еще довольно новичок в C ++ (около месяца), но, насколько я могу судить, все кошерно, и оно должно работать.

1

Решение

В заключение! Я пришел к решению этой проблемы. Проблема была в том, что файл def стал не связанным с проектом. Вот что случилось.

При запуске нового проекта dll VS создает файл dllmain.cpp с основной функцией в нем. Мне не нравится иметь этот дополнительный файл в проекте, поэтому я предпочитаю перенести основную функцию в мой файл project.cpp. Когда я делаю это, я удаляю файл dllmain.cpp из проекта. Очевидно, если вы уже связали свой файл def перед удалением dllmain.cpp, он отменит ваш файл def. Я даже не думал перепроверить это, потому что знал, что уже правильно связал файл def.

Чтобы решить эту проблему, все, что мне нужно было сделать, это выбрать файл project.cpp, перейти в меню Project / Properties и заново связать файл def. Теперь я могу наконец начать отладку …..

0

Другие решения


По вопросам рекламы [email protected]