我从网上找了个叫做winGsl的dll,里面有很多科学计算方法。
我想用delphi调用其中的方法,但是不成功。
具体举例:
WINGSLDLL_API double gsl_stats_mean (const double data[], const size_t stride, const size_t n);
我在delphi里这样调用
function gsl_stats_mean(const data:array of double; const stride:DWORD; const n:DWORD):double;stdcall;External 'WinGsl.dll';
不行。加不加stdcall都不行。
请指教应该如何调用啊?
我想用delphi调用其中的方法,但是不成功。
具体举例:
WINGSLDLL_API double gsl_stats_mean (const double data[], const size_t stride, const size_t n);
我在delphi里这样调用
function gsl_stats_mean(const data:array of double; const stride:DWORD; const n:DWORD):double;stdcall;External 'WinGsl.dll';
不行。加不加stdcall都不行。
请指教应该如何调用啊?
解决方案 »
- 用过raize的朋友进来看下,控件菜单不正常,帮助解决下
- 使用mydac组件时问题,自带的dll封装MyConnection1的,MyTable1只能保存一次,保存第二次就出现FUpdateQuery is TCustomMyDataSet错误
- 怎么知道 某个窗口是否是 QQ的窗口?
- BMP图操作???
- 如何将数据库表中的数据导出到EXCEL?而且需自动倒出?
- Table的Active与close、open
- 线程中的对象再创建窗体的问题
- 有问题要提!
- form的close事件结束后,跳到了form的一段不相关的procedure处,由于form已经free了,所以报地址错,检查过了,程序没有错,配置文件也重
- Delphi中怎么使DateTimePicker控件中选择的日期与机器现有时间进行比较大小
- select中带有dateTimepicker值
- select中带有dateTimepicker值
1.有可能是声明函数写的有问题。
2.要用工具,看看那个dll的函数接口声明函数是不是开放了,就是,能被第三方软件调用。
procedure TForm1.Button2Click(Sender: TObject);
var
td:array of double;
s:string;
begin
setlength(td,5);
td[0]:=1;
td[1]:=6.235;
td[2]:=1;
td[3]:=2;
td[4]:=1;
s:=floattostr(gsl_stats_mean(td,1,5));
edit2.Text:=s;
end;
所得的返回值怎么是1啊?我又试了试求gsl_stats_max,返回的也是1.我还是什么地方没写对吧?
我对c不大了解,看网上说cdel要调用者自己负责清栈,那么delphi里还应该做哪些额外的工作么?
我是从这个网址下载的dll
http://www6.in.tum.de/~kiss/WinGsl.htm
我下的是1.4.02版本。vc++编译的。
一种就是delphi 传的是数组指针,一种就是传的是0元素指针。
搂主可以多测试几次,应该能得到正确结果的。
不过我又找到了一个用pascal写的数学库,叫什么tpmath
对比了一下tpmath和wingsl的运算速度,算平均数c写的wingsl还不如tpmath呢。
供其它童子参考吧。