欢迎您光临博庭社区!

 找回密码
 立即注册
楼主: ptLibert

金魔方DLL接口   [复制链接]

Rank: 6Rank: 6

激情奖

发表于 2012-10-7 21:42:39 |显示全部楼层
可否制作个函数通用的模板,以对话框的形式填写函数名,返回类型,参数个数,类型,然后确认后由用户自己去实现,并把实现的文件通过程序自动打包入库,成为库的成员

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2012-10-7 21:44:47 |显示全部楼层
主程序只是负责收集文本然后交给编译器,然后写lib

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2012-10-7 21:48:11 |显示全部楼层
这样开发人员以后写库就有了个平台了,不需要动主程序了,相当于函数ide环境,同时在公式脚本中很容易调用他们,以前都是调用dll,由主程序解释运行

使用道具 举报

Rank: 9Rank: 9Rank: 9

发表于 2012-10-20 19:14:28 |显示全部楼层

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-23 11:00:06 |显示全部楼层
本帖最后由 ptLibert 于 2012-10-23 13:27 编辑

往DLL传递数组.
公式代码:
  1. extern 'FoxFunc.dll'  void  pass_array(NumericArray params, NumericArray result);
  2. extern 'FoxFunc.dll'  void  pass_array2(NumericArray params, NumericArray result);

  3. array:params[10](1),result[10](0);
  4. //ad:close;
  5. //if (BARPOS == DATACOUNT) then begin
  6.    
  7.         pass_array2(params, result);
  8.         for i = 0 to 9  do  begin
  9.                 print(result[i]);
  10.         end
  11. //end
复制代码
DLL的c 源码
例1
  1. /** 传递数组,参数里的值可以改变
  2. //使用
  3. extern 'FoxFunc.dll'  void  pass_array(NumericArray params, NumericArray result);
  4. array:params[10](1),result[10](0);
  5. pass_array(params, result);
  6. */
  7. extern "C" __declspec(dllexport) void WINAPI pass_array( double* params, double* result)
  8. {
  9.         for (int i = 0; i < 10; i++)
  10.                 result[i] = params[i] + i;
  11. }
复制代码
例2
  1. /** 传递数组,参数里的值可以改变
  2. //使用,和上例一样,公式里声明都使用NumericArray,只是在实现时dll函数声明用double params[10],
  3. //推荐使用这种方式实现传递数组函数,明确声明了数组维度,注意往数组写数据不能超过公式里数组声明的大小,
  4. //否则可能会导致金魔方软件意外 终止。
  5. extern 'FoxFunc.dll'  void  pass_array2(NumericArray params, NumericArray result);
  6. array:params[10](1),result[10](0);
  7. pass_array2(params, result);
  8. */
  9. extern "C" __declspec(dllexport) void WINAPI pass_array2(double params[10], double result[10])
  10. {
  11.         for (int i = 0; i < 10; i++)
  12.                 result[i] = params[i] + i;
  13. }
复制代码

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2012-10-23 14:00:17 |显示全部楼层
array:params[10](1),result[10](0);

后面的(1) (0)是什么意思

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-23 14:14:42 |显示全部楼层
是初始化成1,和0

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-23 14:15:29 |显示全部楼层
赋初值
array:params[10](1)表示这个数组里的值都赋值为1.

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-23 14:15:39 |显示全部楼层
nttz 发表于 2012-10-7 21:44
主程序只是负责收集文本然后交给编译器,然后写lib

这个难度很高啊。。。等于要开发一个dll编译器了

使用道具 举报

Rank: 2

发表于 2012-10-28 21:16:06 |显示全部楼层
好高深啊!

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-11 17:18 , Processed in 0.042099 second(s), 9 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部