關於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,®Key1);
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,®Key2);
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);
/*下面的代碼不動*/
......
}