问题描述:
最近在编写MFC程序,用到了浏览器控件【Microsoft Web Browser】,通过浏览器对象的Navigate()函数设置显示html页面,将写好的文件放在程序目录下之后,想用相对路径来调用自己写的一个“geodemo.htm”文件,失败。
原因:
首先你要搞懂什么是相对路径。相对路径就是相对本进程的当前活动目录,一般是在本进程的可执行文件的所在目录,程序安装在其他电脑之后,进程运行期间可以随意修改,所认不到路径。
解决方案:
方案一:
通过计算先获取进程路径后,后面添加相对路径的地址。
即通过GetModuleFileName()函数获取当前进程完整路径的函数:
DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, _Out_ LPTSTR lpFilename, _In_ DWORD nSize);
HMODULE hModule 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径;
LPTSTR lpFileName 是你存放返回的名字的内存块的指针,是一个输出参数;
DWORD nSize,装载到缓冲区lpFileName的最大值。
使用实例:
char wszPathName[256] = { 0 };
GetModuleFileName( 0, wszPathName, 256);
注意:此方法只能获取当前进程,如需要获取另外的进程路径,可以使用GetModuleFileNameEx函数。
方案二:
用IIS给个端口访问。
我们在做CDHTMLDialog相关的时候,网页部分的内容,建议像网站一样,用IIS给个端口,绑定个目录,然后使用http协议去访问,这样就可以写相对路径了;通过IIS发布网站,给个端口,就可以用IP:端口/相对路径。