300x250
반응형

"Reference Manager Package 패키지가 제대로 로드되지 않았습니다." 오류 해결 방법

패키지 이름은 바뀔 수 있음.

 

 

Visual Studio 2013

%localappdata%\Microsoft\VisualStudio\12.0\ComponentModelCache

 

Visual Studio 2015

%localappdata%\Microsoft\VisualStudio\14.0\ComponentModelCache

 

Visual Studio 2017

%localappdata%\Microsoft\VisualStudio\15.0_xxxx\ComponentModelCache

 

Visual Studio 2022

%localappdata%\Microsoft\VisualStudio\17.0_xxxxxxx\ComponentModelCache

 

 

1. Visual Studio를 종료 한다.

 

2. visual studio 버전별 위치의 폴더를 지우거나 이름을 바꺼준다.

저는 _old 를 붙여서 이름을 변경

 

 

 

 

 

 

3. 다시 Visual Studio를 실행 후 로딩완료되면 다시 껐다가 킨다. (저는 버튼 이미지가 안나왔었음)

 

 

300x250
반응형

'윈도우 프로그래밍 > C, C++, MFC' 카테고리의 다른 글

MFC 웹사이트 열기  (0) 2023.10.21
MFC 중복 실행 막기  (0) 2023.10.21
Inno Script Studio (Inno Setup 확장버전)  (0) 2023.10.14
inno setup 6.2.2 한글언어팩  (0) 2023.10.14
CString -> Char array 변환  (0) 2023.05.25
300x250
반응형

 

 

아래 site_name에 주소만 변경해서 코드를 넣으면 바로 웹사이트가 뜹니다.

브라우저는 윈도우에서 기본으로 설정된 브라우저로 실행되니 참고해주세요.

HINSTANCE hResult;
hResult = NULL;
CString site_name;
site_name = "https://www.naver.com";
hResult = ShellExecute(NULL, _T("open"), site_name, NULL, NULL, SW_SHOW);

 

2023년 어느겨울에..

 

 

 

 

300x250
반응형
300x250
반응형

 

 

 

중복 실행 막는 방법은 대략 아래와 같이 3가지 방법이 있다고 합니다.

 

1. 프로세스 목록에서 프로그램 이름을 확인해서 막는 방법

2. Mutex를 사용한 방법

3. 공유메모리를 사용한 방법

 

저는 Mutex를 사용한 방법이 좋다고 해서 자주 사용하는데 이 방법으로 중복 실행을 막는 방법에 대해서 설명 할께요.

간단합니다.

 

MFC 프로그램 코드를 봅시다.

프로젝트 이름이 Test 라는 프로젝트로 만들었다면, CTestApp::InitInstance() 라는 함수가 있어요.

 

 

아래 예시 코드를 보면

기존 함수 제일 위에

7줄의 return 코드를 넣어주세요. 바로 이해가 될것이라고 생각 됩니다.

TestApp은 체크할 프로그램 이름과 일치할 필요는 없어요.  다른 프로그램 이름과 안겹치게 유니크 하게 작성해 주세요

BOOL CTestApp::InitInstance()
{
	// 추가해야 하는 코드
	HANDLE hMutex = NULL;
	hMutex = CreateMutex(NULL, TRUE, _T("TestApp"));
	if (GetLastError() == ERROR_ALREADY_EXISTS)
	{
		AfxMessageBox(_T("프로그램이 이미 실행 중입니다."));
		return FALSE;
	}


	// 밑에는 기존 코드
    //
    //
    //
    //
       
    return FALSE;
}

이상입니다.

 

 

좋은 프로그램 만드세요.

2023년 어느 겨울 작성.

 

 

 

300x250
반응형
300x250
반응형

 

inno setup 6의 스크립트를는 가독성이 안좋습니다.

Inno Script Studio 라는 프로그램을 사용하면

기존 기능에 + 왼쪽 설정 메뉴들을 편하게 클릭으로 수정할 수 있습니다.

 

꼭 쓰는걸 추천드립니다.

 

Inno Script Studio 제작자 홈페이지: https://www.kymoto.org/

 

Welcome - Kymoto Solutions

Inno Script Studio Making it simple to build Inno Setup installers! Easily access and build your Inno Setup scripts. Increase your script flexibility with the inbuilt scripting tools & debugger.

www.kymoto.org

 

 

 

 

 

추가로 Inno Script Studio도 한글로 번역번이 있네요 (아래 링크 주소가 제작자분)

Korean.lng
0.07MB

http://www.shdevel.com/2018/11/12/inno-script-studio-%ED%95%9C%EA%B8%80-%EC%96%B8%EC%96%B4%ED%8C%A9/

 

Inno Script Studio 한글 언어팩 - SH DEVELOP

배포용 설치 프로그램을 만들어주는 Inno Setup Compiler의 써드파티 프로그램 Inno Script Studio용 한글 언어팩을 만들었습니다. 제작자 사이트에서 제공해준 번역용 원본 파일 버전이 낮아서 일부 항목

www.shdevel.com

 

 

 

 

300x250
반응형
300x250
반응형

 

 

 

 

 

 

 

Korean.isl
0.02MB

 

스크립트 코드에서

 

[Languages]
Name: "Korean"; MessagesFile: "compiler:Korean.isl"

 

이름과 파일경로 적용해서 사용하면 됩니다.

 

 

 

 

 

 

 

300x250
반응형
300x250
반응형

 

 

 

프로젝트 문자집합이 Unicode 인경우 ( 기본 )

CString str = _T("Hello, world!");

// CString을 Unicode 문자열로 변환
CW2A pszConvertedAnsiString(str);
// CString의 내부 버퍼에 대한 포인터 가져오기
const char* pszConvertedString = pszConvertedAnsiString;

위의 예제에서는 CString 객체인 str을 Unicode 문자열로 변환하기 위해 CW2A 클래스를 사용했습니다. CW2A 클래스는 CString을 char 배열로 변환해주는 역할을 합니다. 그리고 pszConvertedAnsiString 변수를 통해 변환된 문자열을 얻을 수 있습니다. 이후 pszConvertedString 변수에 변환된 문자열의 포인터를 저장하였습니다.

 

 

 

프로젝트 문자집합이 멀티바이트 인경우

CString str = _T("Hello, world!");

// CString을 multibyte 문자열로 변환
CT2CA pszConvertedAnsiString(str);
// CString의 내부 버퍼에 대한 포인터 가져오기
const char* pszConvertedString = pszConvertedAnsiString;

위의 예제에서는 CString 객체인 str을 multibyte 문자열로 변환하기 위해 CT2CA 클래스를 사용했습니다. CT2CA 클래스는 CString을 char 배열로 변환해주는 역할을 합니다. 그리고 pszConvertedAnsiString 변수를 통해 변환된 문자열을 얻을 수 있습니다. 이후 pszConvertedString 변수에 변환된 문자열의 포인터를 저장하였습니다.

 

 

 

300x250
반응형
300x250
반응형

 

솔루션 탐색기 -> 하단 속성관리자에 들어가면 아래와 같은 화면이 뜹니다.

원하는 프로젝트 선택 후 -> 32 / 64비트, debug / release 선택 후

우클릭해서 속성으로 들어갑니다.

 

 

 

공용 속성에서 사용자 메크로 선택후 메크로 추가

기존에 메크로가 TargetName 이 있습니다.

저는 Debug모드로 컴파일시 파일명에 D를 추가하기 위해 TargetNameD 라는 메크로를 만들었습니다.

 

 

프로젝트 우클릭해서 속성창으로 가면

해당 debug / release, x64, x86 에 맞는걸 선택후

링커 -> 출력파일로 가서

아까 추하해둔 사용자 메크로 변수 TargetNameD 를 입력하였습니다.

컴파일이 아래와 같이 뒤에 "D" 가 붙을수 있도록 하였습니다.

 

 

 

실행파일 설정은 여기까지 만 하면되고

만약 DLL을 만든다고 하면 Lib 파일도 D를 붙여야 하기때문에 아래설정을 하나더 해줘야 합니다.

 

링커 -> 고급 -> 가져오기 라이브러리

TargetNameD 라는 설정 변경

 

300x250
반응형
300x250
반응형

 

이번 예제는 현재 위치에 파일이 있는지 확인하는 코드 입니다.

CString full_path = GetExecutedPath() + _T("test/file.tmp");

if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(full_path) && GetLastError() == ERROR_FILE_NOT_FOUND)
{
	AfxMessageBox(_T("파일 X"));
}
else
{
	AfxMessageBox(_T("파일 O"));        
}

GetExcutedPath() 함수는 실행파일이 있는 위치를 리턴해 줍니다.

저걸 사용안하면 프로젝트 소스가 있는 위치에서 파일을 확인하기 때문에 ㅋ

아래 함수를 그대로 복사해서 붙여넣기 하시면 됩니다.

CString GetExecutedPath()
{
    //실행파일 경로 구하는 함수
    CString strResult;
    CString strPath;

    if (GetModuleFileName(nullptr, strPath.GetBuffer(_MAX_PATH + 1), MAX_PATH) != FALSE)
    {
        strPath.ReleaseBuffer();

        strResult = strPath.Left(strPath.ReverseFind('\\') + 1);
    }

    return strResult;
}

 

 

간단하쥬 ㅋ

300x250
반응형

+ Recent posts