У меня есть собственная библиотека, созданная с помощью Visual Studio 2012. Обязательные свойства конфигурации проекта:
ExpertSample.cpp:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <mutex>
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {
return(TRUE);
}
#define MT4_EXPFUNC __declspec(dllexport)
static std::mutex mutex;
MT4_EXPFUNC void __stdcall libInit() {
std::lock_guard<std::mutex> guard(mutex);
OutputDebugStringA("libInit");
}
MT4_EXPFUNC void __stdcall libDeInit() {
std::lock_guard<std::mutex> guard(mutex);
OutputDebugStringA("libDeInit");
}
ExpertSampleTest.mq4:
#import "ExpertSample.dll"void libInit();
void libDeInit();
#import
int init() {
libInit();
return(0);
}
int deinit() {
libDeInit();
return(0);
}
int start() {
// libDeInit();
return(0);
}
Тестирование на Windows 7 (x64) с MetaTrader build 451 (также для build 438) работает нормально.
Тестирование в WinXP Mode Virtual PC (работает в той же Windows 7), когда советник удаляется с графика, весь терминал закрывается. В файлах журнала нет диалогового окна с отчетом о сбое или чего-либо еще.
Приведенный выше код является лишь частью большого проекта. В этом проекте, когда библиотека была построена со всеми видами отладочной информации и большим количеством выходных данных, проблема, казалось, возникала реже.
Кто-нибудь знает, как это исправить, или это проблема MetaTrader 4 или WinXP Mode Virtual PC?
Сам код C ++ выглядит хорошо. Возможные проблемы, которые я вижу:
Других решений пока нет …