我有一个用Visual 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);
}在Windows7 (x64)上使用MetaTrader build 451 (也适用于build 438)进行测试,正常工作。
在WinXP Mode Virtual (运行在同一Windows 7中)中测试它,当EA从图表中删除时,整个终端将关闭。没有崩溃报告对话框,也没有日志文件中的任何内容。
上面的代码只是大型项目的一个子集。在这个项目中,当库是用各种各样的调试信息和大量的输出构建时,这个问题似乎很少发生。
有没有人知道如何修复它,或者它是MetaTrader 4还是WinXP模式虚拟PC问题?
发布于 2013-02-17 00:39:48
C++代码本身看起来不错。我认为可能存在的问题:
https://stackoverflow.com/questions/14887263
复制相似问题