Подскажите пожалуйста, на каких компиляторах можно делать реально работающие DLL для mql. Вопрос возн. из опыта, что например те dll, которые чисто по учебнику делаешь на BC++ не экспортируют функции в приложения VC++ 7.0 и те, что делаешь на VC++, не работают с приложениями Delphi...
- Работа с C++ DLL (интеграция с MS Visual Studio) - Разработка программ
- Маркет - магазин приложений
- Компиляция - Разработка программ
На любых. Важно чтобы функции были cdecl.
Ну вот, например, пишу в delphi 7, т.к. там быстрее всего:
library Forex;
uses windows;
function FCreate(): Integer; stdcall;
begin
CreateFile('D:\text.txt', GENERIC_WRITE or GENERIC_READ, 0,
nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
MessageBox(0,'miojijoijo', 'huhiuh', 0);
result := 0;
end;
exports
FCreate;
begin
end.
Потом пишу Forex.dll в корень D:
В скрипте meta trader 4:
//+------------------------------------------------------------------+
//| MTrader.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
#import "D:\Forex.dll"
int FCreate();
#import
int start()
{
FCreate();
return(0);
}
//+------------------------------------------------------------------+
Запускаем скрипт, и ничего нет: ни окна messagebox, ни файла на D:. С VC++ такая же ситуация... Ну и в чем дело тут?
В VC++.
Файл h:
#define EXPORT __declspec (dllexport)
EXPORT int MyFunction();
Файл cpp:
#include <windows.h>
#include "Spiel.h"
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
{
return TRUE;
};
EXPORT int MyFunction()
{
MessageBoxA(NULL,"nbui","Function from DLL",MB_OK);
return 0;
}
Результат тот же...
library Forex;
uses windows;
function FCreate(): Integer; stdcall;
begin
CreateFile('D:\text.txt', GENERIC_WRITE or GENERIC_READ, 0,
nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
MessageBox(0,'miojijoijo', 'huhiuh', 0);
result := 0;
end;
exports
FCreate;
begin
end.
Потом пишу Forex.dll в корень D:
В скрипте meta trader 4:
//+------------------------------------------------------------------+
//| MTrader.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
#import "D:\Forex.dll"
int FCreate();
#import
int start()
{
FCreate();
return(0);
}
//+------------------------------------------------------------------+
Запускаем скрипт, и ничего нет: ни окна messagebox, ни файла на D:. С VC++ такая же ситуация... Ну и в чем дело тут?
В VC++.
Файл h:
#define EXPORT __declspec (dllexport)
EXPORT int MyFunction();
Файл cpp:
#include <windows.h>
#include "Spiel.h"
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
{
return TRUE;
};
EXPORT int MyFunction()
{
MessageBoxA(NULL,"nbui","Function from DLL",MB_OK);
return 0;
}
Результат тот же...
А в настройках эксперта разрешен импорт DLL? И что пишется в логах?
Renat, пасиб большое, я правда не заметил эту настройку вначале, теперь функции вызываются, еще раз спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь