[英]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 &)
據我了解,一切都應該如此。
我的問題是
為什么metatrader仍然說它無法在dll中找到函數名稱?
我忽略了什么嗎?
我使用的是錯誤的伏都教類型嗎?
星星對齊不正確嗎?
誠然,我對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.