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模块启动前调用,所以最好放在应用程序的最开始的位置。

声明:本文的基本内容参考了的一篇类似的文章,原文是英文的。本文对其做了部分的补充和修改。同时上面的内容有些是可选的,就是说有可能不需要在客户的机器上做这些设置或拷贝这些文件。读者需要根据自己的实际情况灵活处理。