본문 바로가기

운동하는 개발자/c++

(23)
DLL 명시적 링크 LoadLibrary failed 지정된 모듈을 찾을 수 없습니다 (GetLastError : error code 126) c++을 이용해서 명시적링크로 DLL파일을 LoadLibrary 로 읽어오는 작업을 했다 HINSTANCE hDLL; // Handle to DLL hDLL = LoadLibrary("MyDLL"); 핸들 인스턴스를 만들고 LoadLibaray를 호출 할 때 다른 폴더에 있는 DLL파일의 절대경로를 읽어와서 파라미터로 넣어주었는데 핸들은 계속 nullptr이였고 DWORD error_code; error_code = GetLastError();​ 위와 같이 GetLastError 를 호출 해 봤더니 126의 에러코드를 발생하고있었다 126은 모듈을 찾을 수 없다는 내용인데 해당 DLL파일의 절대경로는 윈도우 탐색기로부터 파일을 선택해서 넣은 값인데 이게 잘못될 수 없는데...? 다른 DLL을 읽어보니 정..
c++ wstring to string / string to wstring 몇몇 오래된 API를 쓰다보면 유니코드 문자 타입을 써야 할일이 종종 있다 타입변환 방법은 여러가지가 있지만 최신 C++스럽게 변환해보자(작성당시 c++17버전 사용 + winapi사용안함) - wstring to string (LPCWSTR to LPCSTR) - string to wstring (LPCSTR to LPCWSTR ) #include std::string WstrToStr(const std::wstring& source) { return std::string().assign(source.begin(), source.end()); } std::wstring StrToWstr(const std::string& source) { return std::wstring().assign(source...
fatal error LNK2019 getfileversioninfoa /GetFileVersionInfoSizeA 확인할 수 없는 외부 참조 윈도우 파일 버전 획득 기능을 c++로 구현하면서 winapi를 사용하였는데 빌드 중 위와 같은 에러들이 발생했다 #include 를 추가하였고 해당 함수들을 추적해보면 해당 해더 안에 있는 것도 확인되는데 왜 빌드 중에 fatal error LNK2019에러가 발생하는가 계속 윈도우 파일 버전 획득 방법들을 검색해보다 알게 되었는데 #pragma comment(lib,"version.lib") 이렇게 lib를 추가해줘야 하고 해더만 추가하는 방식은 MFC라이브러리에서만 되는 것으로 추정되었다 MFC를 사용하고 있지 않다면 위와 같이 추가해주면 빌드 중 에러가 발생하지 않는다
error C2143: 구문 오류: ';'이(가) 'namespace' 앞에 없습니다. 이 에러는 해더가 여러 번 호출될 때 발생하기도 한다고 한다 그땐 #prgram once 를 맨 위에 넣어서 중복 호출을 막아주자 나의 경우엔 해더 중복호출 문제가 아니었고 클래스에 코드를 추가하다 발생했다 해당 에러 내용을 visual studio에서 더블클릭해서 따라가 봤다 네..? list??? 실수로 세미콜론을 지우고 저장했나...? 의심했는데 해당 라인엔 아무 문제없었다 진짜 원인은 저 list를 include 한 cpp 파일 중 하나에 세미콜론이 빠졌던 것이다 그것도 list 선언이 아닌 부분에서...;; 너무 불친절한 에러 설명 엄한 데만 계속 찾아보게 되었다 참으로 친해지기 힘든 c++...
cmake를 이용한 zlib 연동기 ( "dll이(가) 없어 코드 실행을 진행할 수 없습니다.") 아직도 윈도우 라이브러리에 대해 명확히 알지 못하고 있던 자신을 반성하며 압축 해제를 위해서 무료이며 가장 범용적인 zlib 라이브러리를 가져다 쓰기로 했다 http://www.zlib.net/
C++ 윈도우 방화벽 설정 / C++ windows firewall 복잡하게 윈도우 DLL을 이용하지 않고 간단하게 커맨드 명령으로 방화벽 설정이 가능하다 (당연히 관리자 권한 필요) Netsh 라는 명령어를 사용하는데 이게 윈도우 xp를 이후 버전과 이하버전의 명령어가 다르다 1. 윈도우 버전이 XP 이하인지 확인 bool IsWindowsMajor() { OSVERSIONINFO info; ZeroMemory(&info, sizeof(OSVERSIONINFO)); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&info); return (info.dwMajorVersion >= 6); //윈XP보다 높은버전일 경우 True }​ * GetVersionEx는 윈8이상부터 정확히 판단하지 못하고 더 이상 ..
QT 설치 중 오류(Error during installation process (qt.tools.perl) QT 5.12.12설치 중 에러가 발생했다 중단점은 Installing component Strawberry Perl 5.22.1.3 부분이였고 정확한 원인은 찾지 못했지만 보통 보안프로그램에서 setup이 msi를 실행하는것을 막았다는 내용은 있었다 그리고 해결책으론 저 에러가 뜬 해당 파일을 직접 실행해서 설치해주는것이다 저 에러창은 그대로 둔 뒤 에러가 발생한 해당경로로 가서 msi를 설치해준 뒤 Ignore를 눌러서 QT설치를 마저 진행하였다