2007年春节的时候,我在此处记录了将MDI应用程序封装到OCX中的过程,时隔一年,我才有机会将一个完完整整的PACS程序封装成OCX,然后在IE中调用。
将PACS封装成为OCX这个过程很简单,已经在我去年的BLOG中记录了。在IE中调用时遇到了如下的几个问题:
1、应用程序文件名称的问题,在PACS程序中,应用程序的命令是AnyPacs.exe,而通过IE浏览器调用OCX时应用程序的名称是IEXPLORE.EXE。通过API函数GetModuleFileName(NULL,exeFullPath,MAX_PATH);计算得到应用程序的名称。
2、应用程序的工作路径。还是通过GetModuleFileName(NULL,exeFullPath,MAX_PATH);得到路径。
3、数据库的路径。应用程序工作路径的基础上计算得到数据库的路径。
4、OCX有关DLL的加载失败。
在WEB浏览器中工作时上述(1,2,3)的路径计算与实际普通的EXE程序运行时都不同。关键是GetModuleFileName(NULL,exeFullPath,MAX_PATH);函数的调用。该函数的第一个参数( HMODULE hModule)如果为NULL,则将返回应用程序的文件名称,如果为当前DLL的hInstance值,则返回的是当前DLL的文件全路径。
对于第四个问题,需要将OCX所在的路径设置到系统的Path变量中。
将PACS封装成为OCX这个过程很简单,已经在我去年的BLOG中记录了。在IE中调用时遇到了如下的几个问题:
1、应用程序文件名称的问题,在PACS程序中,应用程序的命令是AnyPacs.exe,而通过IE浏览器调用OCX时应用程序的名称是IEXPLORE.EXE。通过API函数GetModuleFileName(NULL,exeFullPath,MAX_PATH);计算得到应用程序的名称。
2、应用程序的工作路径。还是通过GetModuleFileName(NULL,exeFullPath,MAX_PATH);得到路径。
3、数据库的路径。应用程序工作路径的基础上计算得到数据库的路径。
4、OCX有关DLL的加载失败。
在WEB浏览器中工作时上述(1,2,3)的路径计算与实际普通的EXE程序运行时都不同。关键是GetModuleFileName(NULL,exeFullPath,MAX_PATH);函数的调用。该函数的第一个参数( HMODULE hModule)如果为NULL,则将返回应用程序的文件名称,如果为当前DLL的hInstance值,则返回的是当前DLL的文件全路径。
对于第四个问题,需要将OCX所在的路径设置到系统的Path变量中。