2024年1月12日发(作者:)
如何发布基于Open CASCADE开发的应用程序
Open CASCADE是一个很复杂的几何建模引擎,它本身包含有几何建模,数据交换,图形显示等多个模块。我们常常遇到这样的情况:一个基于Open CASCADE开发的应用程序,在开发人员使用的计算机上运行的很正常。但当将该应用程序运行在客户机器上时,就有可能出现程序无法启动的情况。这些问题都涉及到Open CASCADE的发布问题。下面我们将讨论如何发布基于Open CASCADE开发的应用程序。
动态链接库DLL:
首先我们要找到应用程序到底使用了那些Open CASCADE的DLL。知道这些信息不难,只要使用一种可以查看应用程序到底加载了那些DLL的软件就可以了。这类软件很多。我们一般使用Visual C++本身提供的Depends工具就可以了。Depends是一种静态分析应用程序包含那些DLL的工具软件。通过Depends,我们先找到应用程序使用了那些Open
CASCADE的DLL,然后将这些DLL随着应用程序一起发布出去。
如果应用程序使用了Open CASCADE的显示模块(例如3D View),那么我们还要包含文件,因为是动态加载的,所以Depends无法发现这个DLL。
如果应用程序使用了OCAF框架,那么有可能还需要包含文件。
资源文件:
根据应用程序使用的模块,有可能还需要包含一些其它的资源文件:
1:如果应用程序使用Open CASCADE的数据交换模块,例如读写IGES,STEP等CAD模型文件。可能需要包含下面的一些资源文件:
A:如果在客户的机器上设置了系统环境变量CSF_LANGUAGE的值为fr,即指定Open
CASCADE的语言环境是法语的话,那么需要将下面的文件随同应用程序一起发布:
%CASROOT%;
%CASROOT%;
%CASROOT%;
B:如果没有在客户的机器上设置系统环境变量CSF_LANGUAGE,或者在客户的机器上设置了系统环境变量CSF_LANGUAGE的值为us。那么需要将下面的文件随同应用程序一起发布:
%CASROOT%;
%CASROOT%;
%CASROOT%;
最后还要在客户的机器上设置如下的系统环境变量:
CSF_SHMessage, CSF_XSMessage, CSF_IGESDefaults, CSF_STEPDefaults,让它们指定
数据交换模块的资源文件到底安装在客户机器上的那个文件目录下。
2:如果应用程序使用了Open CASCADE自带的纹理文件,那么需要将%CASROOT%
srcTextures目录下的纹理文件随同应用程序一起发布。同时还要在客户的机器上设置系统环境变量CSF_MDTVTexturesDirectory,让它指向纹理文件所在的文件目录。
3:如果应用程序使用Open CASCADE的单位相关的模块,则需要将%CASROOT%
srcUnitsAPILexi_和%CASROOT%两个文件随同应用程序一起发布。同时还要在客户的机器上设置系统环境变量CSF_UnitsLexicon和CSF_UnitsDefinition,让它指向单位文件所在的文件目录。
4:如果应用程序使用Open CASCADE的字体文件,则需要将%CASROOT% src FontMFT目录下的字体文件随同应用程序一起发布。同时还要在客户的机器上设置系统环境变量CSF_MDTVFontDirectory,让它指向字体文件所在的文件目录。
系统环境变量:
如果应用程序使用Open CASCADE的显示模块,那么我们需要在客户的机器上设置CSF_GraphicShr环境变量,让这个环境变量指向的完整的文件路径。
MMGT_OPT,MMGT_CLEAR等环境变量用来配置Open CASCADE的内存管理。如果没有特殊的要求,基本上不需要在客户的机器上设置这些环境变量。
可能还需要设置一些其它的环境变量,我们可以参考%CASROOT%目录下有一个叫做的批处理文件。
我们也可以在程序中自己指定这些环境变量,不需要安装程序来设置这些环境变量。例如下面的代码:
OSD_Environment ("CSF_LANGUAGE", "us").Build();
OSD_Environment ("CSF_GraphicShr", "").Build();
const int aMaxPath = 256;
TCHAR szPath[aMaxPath];
char aPath [aMaxPath];
DWORD aRes = GetModuleFileName (NULL, szPath, aMaxPath);
char *p = aPath, *q = (char*)szPath;
while (*p++ = *q++)
q++;
TCollection_AsciiString aCasRootDir (aPath);
(FromEnd ("") - 1);
(FromEnd ("") - 1);
OSD_Environment ("CASROOT", aCasRootDir).Build();
TCollection_AsciiString aResDir = aCasRootDir + "/resources";
_Environment ("CSF_SHMessage", aResDir).Build();
OSD_Environment ("CSF_XSMessage", aResDir).Build();
…………….
注意:这些代码要在Open CASCADE模块启动前调用,所以最好放在应用程序的最开始的位置。
声明:本文的基本内容参考了的一篇类似的文章,原文是英文的。本文对其做了部分的补充和修改。同时上面的内容有些是可选的,就是说有可能不需要在客户的机器上做这些设置或拷贝这些文件。读者需要根据自己的实际情况灵活处理。


发布评论