XP SP3 x86에서 실행되는 Visual Studio 2010에서 간단한 레지스트리 검사 스크립트를 작성하려고 시도했습니다.Visual C++ 오류 : RegGetValueA를 찾을 수 없습니다.
아무 잘못한다 빌드에 던져,하지만 프로그램을 디버깅에 다음과 같은 오류로 종료됩니다 여기
프로그램의 전체 코드입니다.The procedure entry point RegGetValueA could not be located in the dynamic link library ADVAPI32.dll
// #define _WIN32_WINNT 0x0501
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
long reg = RegQueryValueEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", NULL,NULL,NULL,NULL);
// if (reg!=ERROR_SUCCESS) MessageBox(0, "Error Opening Registry Key", "Error", 0);
return 0;
}
wmeyer하여 답변에 따라 추가하는 위 코드의 주석.
언제 주석, 코드는 오류와 함께 종료하지만 다른 오류가 발생하지 않습니다
Debugging information for Test5.exe cannot be found or does not match. Binary was not built with debug information. Do you want to continue debugging?
내가 계속하면, 메시지 박스는 "레지스트리 키를 열기 오류"로 나타납니다.
나는 한 번에 하나씩 다음 세 가지 다른 방법으로 RegQueryValueEx 함수를 대체 해 보았습니다.
나는 그 중 두 가지가 비스타 일 뿐이라고 알고 있지만, 오류가 다른지 알고 싶었습니다.
아니 었어.
long reg = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, hKey);
// Vista+ PHKEY hKey;
long reg = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", hKey);
long reg = RegGetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "", RRF_RT_ANY, NULL, NULL,NULL);
이미 잃어버린 시간은 " 'LPCWSTR'에서 '문자'에서 매개 변수 1 변환 할 수 없습니다"와 같은 여러 가지 다른 오류를 해결하려고 노력했습니다 - 찾을 수 없습니다 "changing the configuration 에 의해 해결되었다 또는 오픈 PDB 파일 "을 changing the configuration으로 해결했습니다.
그래서 다시, 문제는 명확합니다 :- 어떻게 오류를 처리합니까?
- wmeyer가 Vista 전용 메서드를 필터링하기 위해 헤더를 추가하는 제안은 어떻게 시작해야 할 Vista 방법이 없을 때 어떻게 도움이 되었습니까? 왜 프로그램이 여전히 작동하지 않습니까?
내 컴퓨터에는 Windows/syatem32에 advapi.dll 파일이 있습니다.
편집 : 대답이 명확하지 않은 점을 지적했을 때 질문을 완전히 다시 작성했습니다.
원래 Visual Studio 2010은 XP와 하위 호환되지 않는다고 가정했습니다.
나는 그것이 틀렸다는 것을 강하게 들었지만 여전히 VS가 작동하지 못한다.
확실히 32 비트 버전의 Windows에'advapi32.dll' 있습니다.Visual Studio 2010으로 작성된 응용 프로그램은 Windows XP에서 실행됩니다. XP 설치에 어떤 서비스 팩을 설치 했습니까? –
VS2010은 확실히 Windows 7 프로그램을 작성하는 데 사용될 수 있으며 XP에서는 실행되지 않습니다. 컴파일러에서 Vista 및 이후 기능을 숨기려면'/ D_WIN32_WINNT = 0x0501'을 사용하십시오. – MSalters
WinXP SP2 이상은 VS 2010에서 완전히 지원되며 WinXP가 제공하지 않는 API 호출을 사용하지 않도록하십시오. SP2 나 Win2k가없는 WinXP를 지원해야하는 경우 http://stackoverflow.com/questions/2484511/can-i-use-visual-studio-2010s-c-compiler-with-visual-studio-2008s- c-runtime/3502056 # 3502056 – Suma