`
lilisalo
  • 浏览: 1109028 次
文章分类
社区版块
存档分类
最新评论

FORCAL扩展动态库

 
阅读更多

欢迎访问 Forcal数学软件

FORCAL扩展动态库

往Forcal中添加常量、函数或其他任意类型的数据是非常方便的。为了便于函数和数据共享,常将函数和数据封装到动态库中,以动态库的形式向Forcal添加,这种动态库称Forcal扩展动态库。Forcal扩展动态库只需要一个输出函数:

//Forcal扩展动态库唯一的输出函数;
//hFC:Forcal32.dll的句柄;bInit=true:初始化动态库,bInit=false:释放动态库。
//bInit=true时,返回值ForcalDll=0:初始化失败;ForcalDll=1:初始化成功;
//bInit=true时,返回值ForcalDll=2:初始化成功,仅注册一些常量,初始化完成后可卸载该库。
//bInit=false时,返回值ForcalDll=0:释放失败;ForcalDll=1:释放成功;
extern "C" int _stdcall ForcalDll(HINSTANCE hFC,bool bInit)
{
.
.
.

if(bInit) //初始化动态库
{
.
.
.

return 1;
}
else //释放动态库
{
.
.
.

return 1;
}
}

可以看出,虽然Forcal扩展动态库只有一个输出函数,但该函数接受了主调程序加载的Forcal32.dll的句柄,因而可以完成任意复杂的功能。为了应用程序的安全性,在Forcal扩展动态库中禁止使用InitForcal(初始化FORCAL)和FreeForcal(释放FORCAL)这两个函数。

如果在动态库中启动了另一线程,要注意多线程程序中使用Forcal函数的原则,即:除了GetRunErr()、TestRunErr()和SetRunErr()三个函数外,其余的函数只能在单线程中使用(不允许两个及两个以上的线程同时运行这些函数)。为此,约定用pUseForcal=SearchKey("UseForcal",FC_PrivateKey_User); 获得一个函数指针进行多线程之间互斥使用Forcal的通讯,该函数可在主程序或Forcal扩展动态库中定义,函数说明如下:

//(1)iUse=1时,表示要申请使用Forcal,若函数返回值 UseForcal=0:申请成功;UseForcal=1:申请不成功,
//其他线程正在使用Forcal,稍后再进行申请;UseForcal=-1:申请不成功,表示应用程序要释放Forcal,
//因此要做好退出前的准备工作。
//(2)iUse=2时,表示要申请使用Forcal,如果其他线程正在使用Forcal,函数不返回,进行等待,直至申请成功。
//若函数返回值 UseForcal=0:申请成功;UseForcal=1:申请不成功,线程本身正在使用Forcal,不能重复进行申请;
//UseForcal=-1:申请不成功,表示应用程序要释放Forcal,因此要做好退出前的准备工作。
//(3)iUse=0时,表示要归还Forcal的使用权,函数返回值无意义。
//(4)iUse=3时,设置安全标志,表示Forcal运行正常,函数返回值无意义。一般在二级函数中设置该标志,当该函
//数在较长时间内运行时,可用此标志通知Forcal,此时的运行是正常的,没有陷入无限循环等情况。
//(5)iUse=4时,取消安全标志,表示Forcal运行处于不可控制阶段(有陷入无限循环的可能),函数返回值无意义。
//(6)iUse=5时,查询安全标志,UseForcal=0:运行正常;UseForcal=1:运行情况无法预测(有陷入无限循环的可
//能),这是Forcal运行的一般情况。
//注意1:Forcal是极为重要而有限的资源,用完后要及时归还。
//注意2:UseForcal(1)(或者UseForcal(2))和UseForcal(0)必须成对使用。注意不能在二级函数中使用该功能,
//因为二级函数本身就是在Forcal工作区中运行的。
//注意3:UseForcal(3)和UseForcal(4)也要成对使用,且一般在二级函数中使用该功能。
extern "C" int _stdcall UseForcal(int iUse);

在主调程序或任一个Forcal扩展动态库中均可以设置一个函数void _stdcall DllMessage(char *);。然后将该函数的地址用InsertKey("DllMessage",FC_Key_User,DllMessage,NULL,v)传送给Forcal。约定所有Forcal扩展动态库都使用该函数发送信息。任一线程均可根据需要设置该函数。

在设计Forcal扩展动态库时,要遵循谁注册函数和数据谁释放的原则。

在加载和卸载Forcal扩展动态库时,要遵循先进后出的原则,即先加载的后进行卸载。

可以用C/C++、delphi、FORTRAN等任一种高级语言设计Forcal扩展动态库。

本软件包中的“FcData32.dll”、“QuitFC32.dll”、“FcConst.dll”和“Example.dll”四个动态库是用VS 2008设计的。用VS 2008新建一个“Win32 dll”工程,将相应的源程序文件、模块定义文件和头文件Forcal32.h添加到该工程,编译时将活动解决方案配置为“Release”,项目属性中的字符集设置为“未设置”。

FcData32.dll:Forcal数据扩展动态库,支持简单的到任意复杂的数据类型,基本操作对象是FcData数据指针。

QuitFc32.dll:在任意可接受输入的窗口,按 Ctrl+Alt+Q(q) 键可以退出Forcal运行时的无限循环。

FcConst.dll:用于向Forcal添加常量,添加完常量即可卸载该库。源程序文件和模块定义文件在文件夹“dll_FcConst”中。

Example.dll:向Forcal注册了几个函数。源程序文件和模块定义文件在文件夹“dll_Example”中。

由delphi生成的演示程序“Project1.exe”可以加载这四个动态库。

以下是目前的Forcal动态库列表:

类别及说明 动态库 用途 位置
标准库:完成最重要的功能或包含最重要的库函数,可作为构建其他动态库的基础 FcData32 Forcal数据扩展动态库。 本软件包
MForcal32 Forcal模块化编译运行动态库。 作者网站
QuitFc32 退出Forcal运行时的无限循环。 本软件包
实用动态库:比较规范,经过优化的实用动态库 OpenFcGl32 基于OpenGL的进行图形绘制的动态库。 作者网站
FcFunWin32 是一个窗口库,用户可在窗口中自定义多个控件。 作者网站
一般实用动态库:含有各种杂类函数或用途较少的动态库 ofc32 含有各种杂类函数。 作者网站
SPEFUN32 特殊函数动态库。 作者网站
CALCULAS32 微积分动态库。 作者网站
WinConst32 Windows常量动态库。 作者网站
例子动态库:帮助用户学习用的动态库,实用性差。 FcWin32 在动态库窗口中使用Forcal及MForcal。 作者网站
FcConst 向Forcal中添加常量。 本软件包
Example 向Forcal注册函数。 本软件包

版权所有© Forcal数学软件 2002-2008,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y年%m月%d日" startspan -->2008年10月31日<!--webbot bot="Timestamp" i-CheckSum="1443" endspan -->

分享到:
评论

相关推荐

    FORCAL数值计算扩展动态库FcIMSL V1.0测试版.pdf

    FORCAL数值计算扩展动态库FcIMSL V1.0测试版.pdf

    开放式计算程序OpenFC

    OpenFC通过加载Forcal扩展动态库进行功能扩展,这些库可以用VC、Delphi或者Fortran等高级语言进行编写。  OpenFc可以对源程序进行模块化编译,可以打开多个文件同时进行操作,提高了运行效率。  OpenFC允许用户将...

    Forcal数据库应用

    让Forcal的控制台应用程序能够读取数据库中的表达式字符串并计算,你只要双击\ForcalConsole\Forcal数据库应用\ForcalConsole.exe文件,就可以完成创建数据库,读取数据库中的表达式字符串并运算的功能了。...

    forcal编程软件

    这个是forcal进行编程的工具,对于需要此程序的人,希望能提供帮助

    通用的数学表达式编译计算动态库 V5.1

    该动态库支持实数、复数和整数三种类型的数学表达式,这三种表达式可以单独使用,也可同时使用,在同时使用时,允许三种表达式之间的相互调用。 该动态库中的基本函数总数达100多个,除了包括常用数学函数外,还...

    FORCAL V7.0 字符表达式编译运行库

    内容索引:VC/C++源码,控件相关,Forcal,编译 Forcal是一个对字符表达式进行编译计算的动态链接库,具有数值计算、关系运算、逻辑运算、字符处理、流程控制、函数调用等许多的可编程功能。它的部分开发文档是由C++...

    VC Forcal7调用例子.rar

    VC Forcal7调用例子,请在此输入表达式!一次只计算一个表达式!  可在多行中输入表达式。  如果有自变量,只进行编译,但将保留编译结果,自定义的函数随时可以调用。  重新初始化将清除以前的编译结果。  ...

    数学计算系统.rar

    数学和工程计算平台,采用forcal语言和内核,内置有丰富的范例可供参考,可广泛应用于数学建模,工程设计与计算,作图,程式设计等等,计算速度快而准确,让你解决问题不再感觉困难。

Global site tag (gtag.js) - Google Analytics