有三种方法,前两种有缺陷,推荐第三种。
第一种:
通过环境变量获得目录UGII_USER_DIR,缺点在于如果插件不是通过设置环境变量的方式安装,
而是通过在文件 ..\UGII\menus\custom_dirs.dat 中添加路径的方式安装插件,此方法获取主目录将失败。
第二种:
通过读取文件 custom_dirs.dat 找到目录路径,缺点在于如果同时安装了多个插件,并将每个插件目录都添加到了custom_dirs.dat 文件中,那么此方法获取主目录将有多个,而无法准确得知当前工具主目录。
第三种;
获取当前运行的.dll文件的绝对路径,再获得此路径的上一级目录,就是该工具的主目录。
推荐第三种,准确性高,不用考虑安装了多个插件的问题,也不用考虑安装了多个UG版本的问题。
C++代码:
string GetAppModule()
{
int idx;
char ch;
char buf[1024];
CString strTmp;
CString strBak;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
memset(buf, 0, sizeof(char) * 1024);
GetModuleFileName(AfxGetInstanceHandle(), buf, 1024);
ch = ‘\\’;
strTmp = buf;
idx = strTmp.ReverseFind(ch);
strBak = strTmp.Left(idx);
idx = strBak.ReverseFind(ch);
strTmp = strBak.Left(idx);
return strTmp.GetBuffer();
}