为MetaTrader 4开发了一个API函数库 - 页 7 1234567 新评论 Forex Trader 2006.09.25 12:53 #61 下午好,所以我咨询了我认识的一位程序员,他解释说,如果这个DLL不是专门为在Omega中使用而编写的,就不能保证功能。因为Omega可能在DLL的函数调用参数中没有我们需要的资源。下面是一个例子: int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim); 这一行不支持Omega中 "TDateTime *tim "这样的数据。 这意味着只有没有设置参数的终端的开始和结束功能才起作用。在设置参数的地方,我们需要知道DLL采取的是什么参数,如果有例子就更好了。 我想你必须在Delphi中看一个例子,有一个程序员可以准确地告诉你你需要什么,然后寻找Omega工具来向DLL提供所需的参数。如果你想发布一个专门针对Omega的DLL版本,这将使它在快速测试和使用方面变得不可估量,我认为会有很多使用Omega的用户。已经有一些感兴趣的用户。下面是Omega HELP的一小段摘录: 一个重要的点是支持的数据类型列表,见下文。 DLL 函数定义 在从 EasyLanguage 调用 DLL 函数之前,您必须使用 DLL 函数声明指令声明 DLL。 语法。 DefineDLLFunc: "DLLNAME.DLL", Return Type, "FunctionName", Parameters; DLLNAME.DLL是函数所在的DLL名称,Return Type是函数将返回的表达式类型,FunctionName是DLL中定义的函数名称,Parameters是函数预期的参数列表(每个参数用逗号分隔)。 记住32位DLL使用导出的、区分大小写的、使用_cdecl、stdcall或fastcall的声明函数,这一点非常重要。为了使DLL与EasyLanguage兼容,导出的函数 必须使用大写字母创建,并且必须声明为_stdcall。这些导出功能必须列在DLL文件的EXPORTS .DEF部分。在函数原型中使用"_declspec (dllexport) "不足以让 EasyLanguage 找到导出的 DLL 函数。 例如,下面的指令声明了一个名为MessageBeep的函数,该函数永久地位于一个名为USER32.DLL的DLL中。它返回一个布尔值(真/假),并期望有一个参数,即int。 DefineDLLFunc: "USER32.DLL", bool, "MessageBeep", int; 数据类型 EasyLanguage支持许多有效的数据类型,可用于向DLL中包含的函数发送和接收信息。以下是EasyLanguage支持的数据类型列表: 基本数据类型: BYTE 1字节的整数数据类型。 char 1字节的整数数据类型。 int 4字节有符号整数数据类型。 WORD 2个字节的无符号整数数据类型。 long 4字节有符号整数数据类型。 DWORD 4字节的无符号整数数据类型。 float 4字节的浮点数据类型。 double 8字节的浮点数据类型。 BOOL 4字节的布尔数据类型。 变体: UNSIGNED LONG 与DWORD相同。 VOID 意味着 "没有返回值"。 指针类型: LPBYTE 指针指向一个BYTE。 LPINT 指向一个int的指针。 LPWORD 指向一个WORD的指针。 LPLONG 指向一个LONG的指针。 LPDWORD 指向一个DWORD的指针。 LPFLOAT 指向浮点数的指针(以浮点数FAR为单位)。 LPDOUBLE 指向一个双数的指针(在双数FAR中)。 LPSTR 指向一个char的指针。 所有指针都是32位指针,EasyLanguage以同样的方式处理每一个指针。 记住EasyLanguage中的所有数值都是浮点数,除了开盘价、最高价、最低价和收盘价是整数,这一点也非常重要。为了控制这些价格,你必须向构成图表的符号发送价格刻度功能。 例如,如果一个证券的价格比例是1/1000,而最终的价格是105.125,那么这个价格将被发送到DLL,成为105125。为了让DLL知道如何读取这个价格,你必须在保留字PriceScale中发送这个值,在本例中它会返回值1,000。 Developed a library of Forex Trader 2006.09.25 17:01 #62 Omega可能在DLL函数调用的参数中没有你需要的资源。下面是一个例子:<br/ translate="no"> int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim); 在这一行中,"TDateTime *tim "类型的数据不被Omega支持。 现在一切都说得通了。为了解决这个问题,尝试在Omega中指定double类型,而不是TDateTime--即int TikKot(char, double, double, double); 实际上,这些类型很容易互换,并且各使用8字节的内存。好运! Forex Trader 2006.09.26 11:49 #63 好的,谢谢。那么 "char "类型呢,Omega需要Numeric,但DLL需要text?是否有可能更换它? Forex Trader 2006.09.26 13:28 #64 好的,谢谢。那么 "char "类型呢,Omega需要Numeric,但DLL需要text?能否用?<br / translate="no"> 为什么?这是在描述中。 LPSTR 指向一个字符的指针。 这是同一件事。欧米茄文档中是否有这些类型的变量的例子?你需要在那里仔细寻找类似的变体。好运! Forex Trader 2006.10.04 13:24 #65 下午好,找到了问题: 这是来自DLL帮助: 注意:32位DLL使用大小写的导出函数,这些函数使用_cdecl, _stdcall , 或fastcall声明。为了使DLL与EasyLanguage兼容,导出的函数应使用所有大写字母创建,并声明为_stdcall。这些导出的函数必须列在DLL的.DEF文件的EXPORTS部分。在函数原型中使用"_declspec (dllexport) "不足以让 EasyLanguage 找到 DLL 的导出函数。 因此,这里说Omega只对那些用大字书写的函数起作用。我检查了它在另一个DLL中的写法,真的只有大写字母。 如果你改变功能调用(名字用大写字母),那么我们可以进一步测试。 我个人对你们的产品非常感兴趣,我对你们的要求是将DLL适合于Omega。我希望它能发挥作用...好运! 如果你不这样做,那么请在这里发帖,我将不得不在另一个贸易自动化解决方案中工作。谢谢你。 Forex Trader 2006.10.04 14:48 #66 <br / translate="no"> 如果你改变了Function的调用(名字用大写字母),那么你可以进一步测试。 我个人对你们的产品非常感兴趣,我对你们的要求是将DLL适合于Omega。我希望它能发挥作用...好运! 我做了一个带有大功能字母的变体,并把它发送到你的收件箱。好运! Forex Trader 2006.10.05 14:32 #67 非常感谢,我将进行测试并公布结果。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim);
这一行不支持Omega中 "TDateTime *tim "这样的数据。
这意味着只有没有设置参数的终端的开始和结束功能才起作用。在设置参数的地方,我们需要知道DLL采取的是什么参数,如果有例子就更好了。
我想你必须在Delphi中看一个例子,有一个程序员可以准确地告诉你你需要什么,然后寻找Omega工具来向DLL提供所需的参数。如果你想发布一个专门针对Omega的DLL版本,这将使它在快速测试和使用方面变得不可估量,我认为会有很多使用Omega的用户。已经有一些感兴趣的用户。下面是Omega HELP的一小段摘录:
一个重要的点是支持的数据类型列表,见下文。
DLL 函数定义
在从 EasyLanguage 调用 DLL 函数之前,您必须使用 DLL 函数声明指令声明 DLL。
语法。
DefineDLLFunc: "DLLNAME.DLL", Return Type, "FunctionName", Parameters;
DLLNAME.DLL是函数所在的DLL名称,Return Type是函数将返回的表达式类型,FunctionName是DLL中定义的函数名称,Parameters是函数预期的参数列表(每个参数用逗号分隔)。
记住32位DLL使用导出的、区分大小写的、使用_cdecl、stdcall或fastcall的声明函数,这一点非常重要。为了使DLL与EasyLanguage兼容,导出的函数 必须使用大写字母创建,并且必须声明为_stdcall。这些导出功能必须列在DLL文件的EXPORTS .DEF部分。在函数原型中使用"_declspec (dllexport) "不足以让 EasyLanguage 找到导出的 DLL 函数。
例如,下面的指令声明了一个名为MessageBeep的函数,该函数永久地位于一个名为USER32.DLL的DLL中。它返回一个布尔值(真/假),并期望有一个参数,即int。
DefineDLLFunc: "USER32.DLL", bool, "MessageBeep", int;
数据类型
EasyLanguage支持许多有效的数据类型,可用于向DLL中包含的函数发送和接收信息。以下是EasyLanguage支持的数据类型列表:
基本数据类型:
BYTE
1字节的整数数据类型。
char
1字节的整数数据类型。
int
4字节有符号整数数据类型。
WORD
2个字节的无符号整数数据类型。
long
4字节有符号整数数据类型。
DWORD
4字节的无符号整数数据类型。
float
4字节的浮点数据类型。
double
8字节的浮点数据类型。
BOOL
4字节的布尔数据类型。
变体:
UNSIGNED LONG
与DWORD相同。
VOID
意味着 "没有返回值"。
指针类型:
LPBYTE
指针指向一个BYTE。
LPINT
指向一个int的指针。
LPWORD
指向一个WORD的指针。
LPLONG
指向一个LONG的指针。
LPDWORD
指向一个DWORD的指针。
LPFLOAT
指向浮点数的指针(以浮点数FAR为单位)。
LPDOUBLE
指向一个双数的指针(在双数FAR中)。
LPSTR
指向一个char的指针。
所有指针都是32位指针,EasyLanguage以同样的方式处理每一个指针。
记住EasyLanguage中的所有数值都是浮点数,除了开盘价、最高价、最低价和收盘价是整数,这一点也非常重要。为了控制这些价格,你必须向构成图表的符号发送价格刻度功能。
例如,如果一个证券的价格比例是1/1000,而最终的价格是105.125,那么这个价格将被发送到DLL,成为105125。为了让DLL知道如何读取这个价格,你必须在保留字PriceScale中发送这个值,在本例中它会返回值1,000。
在这一行中,"TDateTime *tim "类型的数据不被Omega支持。
现在一切都说得通了。为了解决这个问题,尝试在Omega中指定double类型,而不是TDateTime--即int TikKot(char, double, double, double); 实际上,这些类型很容易互换,并且各使用8字节的内存。好运!
为什么?这是在描述中。
指向一个字符的指针。
这是同一件事。欧米茄文档中是否有这些类型的变量的例子?你需要在那里仔细寻找类似的变体。好运!
这是来自DLL帮助:
注意:32位DLL使用大小写的导出函数,这些函数使用_cdecl, _stdcall , 或fastcall声明。为了使DLL与EasyLanguage兼容,导出的函数应使用所有大写字母创建,并声明为_stdcall。这些导出的函数必须列在DLL的.DEF文件的EXPORTS部分。在函数原型中使用"_declspec (dllexport) "不足以让 EasyLanguage 找到 DLL 的导出函数。
因此,这里说Omega只对那些用大字书写的函数起作用。我检查了它在另一个DLL中的写法,真的只有大写字母。
如果你改变功能调用(名字用大写字母),那么我们可以进一步测试。
我个人对你们的产品非常感兴趣,我对你们的要求是将DLL适合于Omega。我希望它能发挥作用...好运!
如果你不这样做,那么请在这里发帖,我将不得不在另一个贸易自动化解决方案中工作。谢谢你。
我个人对你们的产品非常感兴趣,我对你们的要求是将DLL适合于Omega。我希望它能发挥作用...好运!
我做了一个带有大功能字母的变体,并把它发送到你的收件箱。好运!