gpt4 book ai didi

C++ 和 MQL4 无法在 dll 中找到函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:32 25 4
gpt4 key购买 nike

好吧,我知道每个人都在想,“这已经回答了好几次了。”好吧,你错了。这次不同了。我已经尝试了所有其他答案。情况是这样的。

我正在 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 &)

据我了解,一切都是应该的。

我的问题是

  1. 为什么 metatrader 仍然说找不到dll中的函数名?

  2. 我是不是忽略了什么?

  3. 我是不是使用了错误类型的巫术?

  4. 星星没有正确对齐吗?

诚然,我对 C++ 还是很陌生(大约一个月),但据我所知,一切都还不错,而且应该可以工作。

最佳答案

终于!我已经解决了这个问题。问题是,def 文件与项目断开了链接。事情是这样的。

当开始一个新的dll项目时,VS会创建一个dllmain.cpp文件,里面有main函数。我不喜欢在项目中有这个额外的文件,所以我更喜欢将 main 函数移动到我的 project.cpp 文件中。当我这样做时,我从项目中删除了 dllmain.cpp 文件。显然,如果您在删除 dllmain.cpp 之前已经链接了您的 def 文件,它将取消链接您的 def 文件。我什至从未想过要重新检查它,因为我知道我已经正确链接了 def 文件。

要解决此问题,我所要做的就是选择 project.cpp 文件,然后进入“项目/属性”菜单,然后重新链接 def 文件。现在,我终于可以开始调试了......

关于C++ 和 MQL4 无法在 dll 中找到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30896372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com