关于iFeng助手连接版 部分用户会出现运行出错的情况,已经做了改进,将下面的函数覆盖即可

来源:互联网 发布:福建护理网络教育 编辑:程序博客网 时间:2024/04/30 03:01

关于iFeng助手连接版 部分用户会出现运行出错的情况,已经做了改进,将下面的函数覆盖即可

在iFeng文件夹的iTunesApi.cpp文件中

UINT iTunesApi::InitApi()
{
 char *libvar = NULL;
 char newlibvar[4096];
 char dllpath_iTunesMobileDevice[MAX_PATH] = {0};
 char dllpath_CoreFoundation[MAX_PATH] = {0};

 HKEY regKey1=NULL,regKey2=NULL;
 WCHAR value1[MAX_PATH]={0},value2[MAX_PATH]={0};
 long ret = 0;
 unsigned long vsize = MAX_PATH;
 DWORD dwType=REG_NONE;
 ret = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)L"SOFTWARE\\Apple Inc.\\Apple Mobile Device Support\\Shared",0, KEY_READ,&regKey1);
 if (ret) return 2;
 ret = ::RegQueryValueEx(regKey1,(LPCWSTR)L"iTunesMobileDeviceDLL",0,&dwType,(LPBYTE)value1,&vsize);
 if (ret) return 2;
 ret = ::RegCloseKey(regKey1);
 ret = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)L"SOFTWARE\\Apple Inc.\\Apple Application Support",0, KEY_READ,&regKey2);
 if (ret) return 2;
 ret = ::RegQueryValueEx(regKey2,(LPCWSTR)L"InstallDir",0,&dwType,(LPBYTE)value2,&vsize);
 if (ret) return 2;
 ret = ::RegCloseKey(regKey2);
 
 UINT len1 = wcslen(value1) - strlen("\\iTunesMobileDevice.dll");
 UINT len2 = wcslen(value2) - 1;
 wcstombs(dllpath_iTunesMobileDevice,value1,wcslen(value1) - strlen("\\iTunesMobileDevice.dll"));
 wcstombs(dllpath_CoreFoundation,value2,wcslen(value2) - 1);
 dllpath_iTunesMobileDevice[len1] = '\0';
 dllpath_CoreFoundation[len2] = '\0';

 WCHAR ____iTunesMobileDevice_path[MAX_PATH] = {0};
 WCHAR ____CoreFoundation_path[MAX_PATH] = {0};
 WCHAR ____SQLite3_path[MAX_PATH] = {0};
 WCHAR ____LocalRunPath[MAX_PATH] = {0};
 __hCoreFunctionDll = NULL;
 __hiTunesDeviceDll = NULL;

 libvar = getenv("path");
 sprintf(newlibvar,"path=%s;%s;%s",dllpath_CoreFoundation,dllpath_iTunesMobileDevice,libvar);
 _putenv(newlibvar);
 libvar = getenv("path");
 wcscpy(____iTunesMobileDevice_path,value1);
 wcscpy(____CoreFoundation_path,value2);
 wcscat(____CoreFoundation_path,L"CoreFoundation.dll");
 wcscpy(____SQLite3_path,value2);
 wcscat(____SQLite3_path,L"SQLite3.dll");
 GetModuleFileName(NULL,____LocalRunPath,MAX_PATH);
 UINT uLen = wcslen(____LocalRunPath);
 while (____LocalRunPath[--uLen]!='\\'){}
 ____LocalRunPath[uLen] = '\0';
 wsprintf(____LocalRunPath,L"%s\\SQLite3.dll",____LocalRunPath);
 CopyFile(____SQLite3_path,____LocalRunPath,FALSE);
 
 __hCoreFunctionDll = ::LoadLibrary(____CoreFoundation_path);
 __hiTunesDeviceDll = ::LoadLibrary(____iTunesMobileDevice_path);

 

/*下面的代码不动*/

......

}

0 0
原创粉丝点击