路径的一个问题?
不知道大家遇到过没有?一个dll有个函数是读当前目录的“test.txt”文件,我用程序调用很正常,不过我写成ocx调用的时候就出怪问题了,dll找到当前目录,既不是system32又不是winnt,而是桌面,这是为什么? 问题点数:50、回复次数:4Top
1 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2002-12-03 22:18:49 得分 15
你的快捷方式是不是在桌面?
你把快捷方式的程序运行目录也改过去看看。
我觉得还是少用默认的路径比较好。Top
2 楼cbuser(cbuser)回复于 2002-12-03 22:25:32 得分 0
没有快捷方式呀,ocx是html中js调用的Top
3 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-12-03 22:37:29 得分 25
IE的快捷方式是桌面吧。dll操作路径很麻烦,最好能在dll中用dll所在的路径去组合得到。
给你个例子关键是//****注释的前面。
有两个方法,一个是知道自己的名字。另一个是不知道自己的名字(动态库名被修改了)
char dllpath[256];
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
if(lpReserved)
OutputDebugString("DLL_PROCESS_ATTACH Static load");
else
OutputDebugString("DLL_PROCESS_ATTACH Dynamic load");
GetModuleFileName(hinst,dllpath,255);//*****
break;
case DLL_PROCESS_DETACH:
if(lpReserved)
OutputDebugString("DLL_PROCESS_DETACH Call process termination!");
else
OutputDebugString("DLL_PROCESS_DETACH FreeLibrary");
break;
case DLL_THREAD_ATTACH:
OutputDebugString("DLL_THREAD_ATTACH");
break;
case DLL_THREAD_DETACH:
OutputDebugString("DLL_THREAD_DETACH");
break;
default:
OutputDebugString("DllEntryPoint");
}
return 1;
}
//---------------------------------------------------------------------------
//--Function GetIniFileName
//--功能:获得Dll对应目录下的ini文件的名称
//---------------------------------------------------------------------------
int GetIniFileName(char *inifile,const char * inifilename)
{
int iRet=0;
char dllpath[256];
iRet = GetModuleFileName(GetModuleHandle("myapi.dll"),dllpath,255);//*****
memset(inifile,0,sizeof(inifile));
if(iRet > 0)
strcpy(inifile,ExtractFilePath(dllpath).c_str());
strcat(inifile,inifilename);
return iRet;
}
//---------------------------------------------------------------------------
//--Function getSvrInfo
//--功能:从ini文件中读取Ants Server配置信息
//---------------------------------------------------------------------------
int getSvrInfo(char * cSvrIP,int &iPort){
TIniFile *ini;
AnsiString asSvrIP;
char inifile[255];
GetIniFileName(inifile,"AntsAPI.ini");
ini = new TIniFile(inifile);
asSvrIP = ini->ReadString("ServerInfo","asServerIP","127.0.0.1");
strcpy(cSvrIP,asSvrIP.c_str());
iPort = ini->ReadInteger("ServerInfo","iServerPort",3721);
delete ini;
return 0;
}
Top
4 楼wangxiangsjz(王翔)回复于 2002-12-03 22:39:52 得分 10
还有可能是“我的文档”。不过我认为这些问题没有必要深究,重新设置一下路径就是了。Top




