好吧,我知道大家都在想,“这已经回答了好几次了。” 好吧,你错了。这一次不同。我已经尝试了所有其他答案。这就是这种情况。
我正在 Metatrader 4(mql4 代码)中创建一个指标。我正在编写一个 dll 来用 C++ 在 Visual Studio 2013 中进行计算。
相关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
-references。没有一个结构包含对象、指针、引用、字符串、其他结构、类、方法或数组。一些结构是数组,但作为传递的参数是完全有效的。因此,没有传递无效的参数。我已经验证每个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);
}
}
在我的 def 文件中:
LIBRARY test
EXPORTS
LiveChart
我已经使用Dependency Walker程序查看了代码。它告诉我函数的名称是:
bool LiveChart(struct BarTrack const &,struct Stars &,struct Patterns *,struct Patterns *,struct Patterns *,struct Patterns *,struct BarData const *,struct Basics &)
据我了解,一切都是应该的。
我的问题是,
为什么metatrader仍然说在dll中找不到函数名?
我忽略了什么吗?
我是否使用了错误类型的巫毒教?
星星没有正确对齐吗?
诚然,我对 C++ 还是很陌生(大约一个月的时间),但据我所知,一切都是 kosher 的,它应该可以工作。