0
我有一个本地库建立与Visual Studio 2012年所需的项目配置属性:的MetaTrader4关闭(崩溃?)
- 一般/平台工具集=的Visual Studio 2012 - 的Windows XP(v110_xp)
- C/C++ /代码生成/运行时库=多线程(/ MT)
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(64位)与MetaTrader的建立451(也可用于构建438)正常工作。
测试它在WinXP模式虚拟PC(运行在同一个Windows 7内),当EA从图表中删除时,整个终端关闭。没有崩溃报告对话框或日志文件中的任何内容。
- 如果我从start()调用libDeInit()它工作正常。
- 如果我从libDeInit()中删除锁守卫,它工作正常。
上述代码只是大型项目的子集。在那个项目中,当图书馆建立了各种调试信息和大量输出时,问题似乎不太经常发生。
有人知道如何解决它,或者它是否是MetaTrader 4或WinXP Mode Virtual PC问题?
在libInit()中也可以访问互斥锁,所以构造函数不能成为问题 – Ogmios 2013-02-27 13:57:34