繁体   English   中英

C ++和MQL4在dll中找不到函数

[英]C++ and MQL4 Cannot find function in dll

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM