下面是我在Visual Studio 2012 C++中的代码。文件main.以cpp为扩展名(main.cpp)。
#define MT4_EXPFUNC __declspec(dllexport) создал макрос чтобы не писать запись __declspec(dllexport)int __stdcall add(int a=0, int b=0)
//__declspec(dllexport)int __stdcall add(int a=0, int b=0)и так пробовал тоже
MT4_EXPFUNC int __cdecl add(int a=0, int b=0)//stdcall данная примитивная функция ничего не делает а просто возвращает значение 18
{return (18);пробовал так return18;}
这就是问题所在,脚本只是踢出,我怎么能看到之后的错误代码?或者下次运行的时候,能不能立即读取?
原则上,通过 为64x编译dll 来解决这个问题。虽然之后我得到了更多的错误,但这并不重要。 我只是需要了解如何建立和链接c/s++的库到mql5的一般情况。我的例子现在运行良好。
如果你有Studio 2017,而你在看这些旧工作室的说明时,不知道要做什么或怎么做,我建议你先阅读这篇文章:https://docs.microsoft.com/ru-ru/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2017。
然后,当你按照本文的例子创建了你的dll,并在客户端应用程序上进行了测试,请阅读这个指令,从第2点开始,"在MQL5程序中,它应该被这样描述和调用:"。换句话说,在mt5中按照那里的描述声明你的dll。
我已经这样解决了我的问题。
我想要一个以宏的形式列出的C++和MQL之间的类型关联性。
#define MQL_STRING wchar_t
下面是我在Visual Studio 2012 C++中的代码。文件main.以cpp为扩展名(main.cpp)。
然后我创建了一个主扩展名为def的文件(main.def),其中有一个导出的函数列表,代码看起来像这样。
LIBRARY "dllmt42" EXPORTS add
然后我把它导入编译器
编译后没有问题,但当你把EA留在图表上时,我就感到困惑了
未解决的导入函数调用,在'dllmt42.dll'中找到'_add'。拖动文件时,Total Comander会看到该函数以及编译器本身
谁能帮助如何解决这个错误的问题,毕竟有一个扩展名为.def的文件,它存储并负责正确导出函数?
以下是我在Visual Studio 2012 c++中的代码。文件main.以cpp为扩展名(main.cpp)。
然后我创建了一个主扩展名为def的文件(main.def),其中有一个导出的函数列表,代码看起来像这样。
然后我把它导入编译器
编译后没有问题,但当你把EA留在图表上时,我就感到困惑了
未解决的导入函数调用,在'dllmt42.dll'中找到'_add'。拖动文件时,Total Comander会看到该函数以及编译器本身
谁能帮助,如何解决错误的问题,毕竟有一个扩展名为.def的文件,它存储并负责正确导出函数?
在导出函数的声明和实现中都应该加上extern "C",因为这是C++。否则,输入的签名就是 "加号",MT(以及其他所有人)将看不到它们。
在导出函数的声明和实现中都必须添加extern "C",因为C++在这里。否则,输入的签名是 "加号",MT(像其他人一样)不会看到它们。
我以这种方式添加了它
但还是同样的问题--未解决的导入函数调用,在'dllmt42.dll'中找到'_add'...也就是说,我需要没有++的纯C?
根本不需要.def文件。你需要在MQL的#import部分重复这些函数
好吧,是的,没有它我就看到了之类的,我不去,好吧,给我看看它是什么复制的,已经指出的方式?