簡體   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