新格式 DLL调用

来自tradeStar帮助系统
(版本间的差异)
跳转到: 导航, 搜索
(逐根模式DLL接口说明)
(DLL的返回值)
第20行: 第20行:
  
 
=DLL的返回值=
 
=DLL的返回值=
 +
新格式DLL可返回单值,序列和数组。单值类型大致分为两种:数值类型和字符串类型,可以通过函数返回值直接返回。
 +
*返回单值类型的例子
 +
//返回整数
 +
extern "C" __declspec(dllexport) int WINAPI my_test1()
 +
{
 +
return 1;
 +
}
 +
//返回浮点
 +
extern "C" __declspec(dllexport) float WINAPI my_test2()
 +
{
 +
return 2.0f;
 +
}
 +
//返回字符串
 +
extern "C" __declspec(dllexport) LPCWSTR WINAPI my_test3()
 +
{
 +
return L"TEST STRING";
 +
}
 +
相应的公式调用例子
 +
#MAINCHART
 +
#Run_By_Bar
 +
extern 'MyDll2.dll' int my_test1();
 +
extern 'MyDll2.dll' float my_test2();
 +
extern 'MyDll2.dll' LPCWSTR my_test3();
 +
k1: my_test1;
 +
k2: my_test2;
 +
comment(my_test3);
 +
 +
若要返回序列或数组,则把需要返回的序列赋值目标当作参数传递给DLL,在DLL内部直接修改已达到赋值。
 +
注意逐根运行模式下,每一根K线都会调用dll,所以通常每次调用只需要赋值比上一根K线新增加的类型,
 +
例如计算收盘价均值时,每次在BarPos位置填入当根K线的均值即可。由此可见,这种应用下通常需要把
 +
BarPos(当前是第几根K线)作为参数传入Dll中。
 +
*返回序列和数组的例子
 +
extern "C" __declspec(dllexport) void WINAPI my_test4(float*pReturn, int nIndex)
 +
{
 +
pReturn[nIndex-1] = 123;
 +
}
 +
 +
extern "C" __declspec(dllexport) void WINAPI my_test5(float*pReturn, int nLen)
 +
{
 +
for(int i=0;i<nLen;i++)
 +
pReturn[i] = 0;
 +
}
 +
相应的公式调用例子
 +
#MAINCHART
 +
#Run_By_Bar
 +
variable:
 +
  NumericSeries mySequence(0);
 +
array:
 +
  myArray[100](1);
 +
 +
extern 'MyDll2.dll' void my_test4(NumericSeries mySequence, int nIndex);
 +
extern 'MyDll2.dll' void my_test5(NumericArray myArray, int nLen);
 +
my_test4(mySequence, BarPos);
 +
my_test5(myArray, 100);
  
 
=DLL的参数类型=
 
=DLL的参数类型=

2013年4月12日 (五) 17:34的版本

新的公式逐根运行模式每次只计算新增数据,不需要整条序列重新运算,这样可以大大提升效率。 有鉴于此,DLL调用也有了新的格式。

目录

逐根模式DLL接口说明

  1. 扩展函数用windows 32位动态链接库实现,建议使用Microsoft Visual C++编程
  2. 只能用于逐根运行模式#Run_By_Bar, 参考公式运行模式
  3. 调用前需要声明 extern 返回值类型 函数名(参数类型 参数,...);
  4. 调用时直接调用函数名,与普通函数调用方式一样
  5. DLL名称和函数名可以自己定义
  6. 使用时必须将DLL放在软件安装目录下的FmlDll子目录下

DLL函数格式

  1. DLL名称和函数名都是大小写敏感的,代码声明和公式调用时需要匹配。
  2. 参数的个数和名称都没有限制,支持基础的数据类型float, double, int,BOOL, LONG, DWORD, float*, LPCWSTR等,注意序列类型只能是 float*, 单值类型则是通用的
// C 代码里的声明
extern "C" __declspec(dllexport) void WINAPI my_ma2(float* pResultBuffer, float* pDataBuffer, int n, int barpos)

公式里面的声明

 // 公式里面的声明
 extern 'MyDll2.dll' void  my_ma2(NumericSeries ResultBuffer, NumericSeries DataBuffer, int n, int barpos);

DLL的返回值

新格式DLL可返回单值,序列和数组。单值类型大致分为两种:数值类型和字符串类型,可以通过函数返回值直接返回。

  • 返回单值类型的例子
//返回整数
extern "C" __declspec(dllexport) int WINAPI my_test1()
{
	return 1;
}
//返回浮点
extern "C" __declspec(dllexport) float WINAPI my_test2()
{
	return 2.0f;
}
//返回字符串
extern "C" __declspec(dllexport) LPCWSTR WINAPI my_test3()
{
	return L"TEST STRING";
}

相应的公式调用例子

#MAINCHART
#Run_By_Bar
extern 'MyDll2.dll' int my_test1();
extern 'MyDll2.dll' float my_test2();
extern 'MyDll2.dll' LPCWSTR my_test3();
k1: my_test1;
k2: my_test2;
comment(my_test3);

若要返回序列或数组,则把需要返回的序列赋值目标当作参数传递给DLL,在DLL内部直接修改已达到赋值。 注意逐根运行模式下,每一根K线都会调用dll,所以通常每次调用只需要赋值比上一根K线新增加的类型, 例如计算收盘价均值时,每次在BarPos位置填入当根K线的均值即可。由此可见,这种应用下通常需要把 BarPos(当前是第几根K线)作为参数传入Dll中。

  • 返回序列和数组的例子
extern "C" __declspec(dllexport) void WINAPI my_test4(float*pReturn, int nIndex)
{
	pReturn[nIndex-1] = 123;
}

extern "C" __declspec(dllexport) void WINAPI my_test5(float*pReturn, int nLen)
{
	for(int i=0;i<nLen;i++)
		pReturn[i] = 0;
}

相应的公式调用例子

#MAINCHART
#Run_By_Bar
variable:
  NumericSeries mySequence(0);
array:
  myArray[100](1);

extern 'MyDll2.dll' void my_test4(NumericSeries mySequence, int nIndex);
extern 'MyDll2.dll' void my_test5(NumericArray myArray, int nLen);
my_test4(mySequence, BarPos);
my_test5(myArray, 100);

DLL的参数类型

无效数据表示

编写调用公式

开发DLL的详细例子

实例下载

个人工具
名字空间

变换
操作
导航
工具箱