选项1)弄清楚把def文件放在哪里。没有它,你可能不会有任何进展。
选项2)安装Visual Studio
大笑
选择3。
有测试人员,至少从VB的excel--检查请求的函数是否被调用。
如果没有--链接器设置不良,有--不是MQL描述中的错误
随着MT4的安装,一个很好的C源DLL被送来--用它来训练,它将节省大量的时间。
#import "PExpDll.dll"
int GetIntValue(int)。
double GetDoubleValue(double)。
string GetStringValue(string)。
##进口
根据MQL-4中函数声明的规则,你有一个明显的错误。
int GetIntValue(int X); double GetDoubleValue(double X); string GetStringValue(string X);
没有输入参数名称,只有类型。这在MQL-4中是不允许的。
根据MQL-4的函数声明规则,有一个明显的错误。
没有输入参数名称,只有类型。在MQL-4中,这是不允许的。
编译器不发誓的东西,你可以。
我试着这样写。
#import "timeService.dll" // функция, выдающее смещение от Utc // до времени сервера и до локального времени int timeService( string , // <--- убрал имя переменной int & utcToServer[], int & utcToLocal[] ); #import
一切运作正常。
实际上,根据C和C++的教条,你根本不需要指定参数名。
此外,在大多数情况下,程序员正忙于坐在那里对它们进行评论。
非常感谢您的建议,感谢您的回复。
1.在MT4中,我勾选了服务-设置-顾问-确认调用 dll的功能。所以,当我运行脚本时,它会问我是否应该调用这样的函数...?我选择了 "是",然后出现了以下错误:不能从dll调用函数(错误127)。
2.没有参数的函数声明怎么办,比如double GetDoubleValue(double),样本中是这样写的,尤其是编译器没有抱怨,所以是可以的。
3.但是def-file怎么办...当然,也许是因为def-file,但我真的不知道该把它放在哪里。在C++ Builder 6和2009项目中,没有这样的扩展文件,也就是说,在构建dll本身时,似乎没有地方可以放置它。在同一文件夹下的同一名称下,在\MetaTrader 4/experts/libraries文件夹是不一样的...试过了...简而言之,这并不清楚。尝试了另一个例子,其中使用了一个现成的系统dll
#import "kernel32.dll"
int _lopen (string path, int of);
int _lcreat (string path, int attrib);
int _llseek (int handle, int offset, int origin);
int _lread (int handle, string buffer, int bytes);
int _lwrite (int handle, string buffer, int bytes);
int _lclose (int handle);
##进口
这些功能被调用。DLLSample的原因尚不清楚。
如果原因在链接器中,那会是什么原因呢?我似乎是在使文件独立。
呃......是的,我不明白。而MT4中的例子肯定是有效的?有谁检查过它,看看它是否有效?
谢谢你们所有人的回应和回复。
{...}3.至于def文件...当然,这可能是因为它,但真的不知道该把它放在哪里。在C++ Builder 6和2009项目中,没有这种扩展名的文件,也就是说,在构建dll本身时,似乎没有地方可以粘贴它。在同一文件夹下的同一名称下,在\MetaTrader 4/experts/libraries文件夹是不一样的...试过了...简而言之,这并不清楚。尝试了另一个例子,它使用了一个现成的系统dll {...}。
这些功能被称为...DLLSample的原因尚不清楚。
如果原因在链接器中,会是什么原因呢?我似乎是在使文件独立。
M...对...不清楚。在MT4中的例子确定是有效的吗?有没有人测试过它是否有效?
谢谢你们所有人的回应和回复。
1)即使建设者是咳咳..."稍有 "错误,仍然需要def文件
2) 你尝试安装Visual Studio了吗?
3) 例子有效。错误的建造者。
1)尽管建设者是咳咳......"稍有 "错误,仍然需要def文件
2)你还没有尝试过Visual Studio
3) 例子有效。错误的建造者。
我实际上是在bilder上为mt4做了dlls,def-file没有用。
如果林克是原因,那么那里会有什么呢?我似乎要把文件独立出来。
你能拍一张项目设置中的编译器、链接器和包的截图吗?
我曾经在dibilder上为mt4制作dlls,def-file没有用。
与同事分享一个例子:-)。
也许你需要在那里的函数声明前写一些方块字。
.
和图片...我还有一份6的副本,上面有4个服务包。
在一个有趣的案例后停止了使用:-)。
当我在一个.cpp文件中添加一个函数时,我得到了各种故障:-)。
漏洞在于,构建者会对通过堆栈传入函数的参数撒谎。
你删除了这个功能--一切又都正常了。
我还可以回忆起全局变量,这些变量只能从一个模块中访问。
在它们被宣布的地方,从其余的地方你看到的是垃圾:-)。
我想学习如何从dll中导入函数。我已经尝试了不同的变体,但下面的错误一直出现:不能从dll中调用函数(错误127)。
1.我试着在C++ Builder 6中编译我的项目。
2.同一项目在C++ Builder 2009中。
3.我在C++ Builder 2009中根据DLLSample的例子创建了一个项目,并将其编译。
到处都是同样的结果:不能从dll调用函数(错误127)。
为了测试它,我用PExpDll.dll的脚本--在C++ Builder 2009中编译的库,来自DLLSample例子,它是MetaTrader 4附带的。
这里是这个脚本。
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#属性链接"https://www.metaquotes.net//"
#import "PExpDll.dll"
int GetIntValue(int)。
double GetDoubleValue(double)。
string GetStringValue(string)。
##进口
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
Print("Script start");
GetStringValue("I wonder if this will work?")。
GetIntValue(10)。
//----
return(0);
}
//+------------------------------------------------------------------+
请帮助我,告诉我我做错了什么...?
预先感谢你。