도구 > 옵션 > Nuget 패키지 관리자 > 패키지 소스

또는

도구 > Nuget 패키지 관리자 > 패키지 관리자 설정 > 패키지 소스

 

 

1. Nuget V2

   추가 URL : https://www.nuget.org/api/v2/

 

2. Nuget V3

   추가 URL : https://api.nuget.org/v3/index.json



 

 

 

1. 이미지 버퍼에서 cv::Mat 초기화 하기.

cv::Mat originFrame = cv::Mat(GetHeight(), GetWidth(), CV_8UC1, GetBits());





2. cv::Mat 의 영상을 BYTE 배열로 변환하기.


LPBYTE src = originFrame.data;
LPBYTE dst = GetBits();

if (src != dst)
{
	Concurrency::parallel_for(0l, (LONG)GetHeight(), [&](int y)
	{
		LPBYTE src_line = src + (y * originFrame.cols);
		LPBYTE dst_line = dst + (y * GetWidthBytes());
		memcpy(dst_line, src_line, GetWidth());
	});
}

다음 코드를 수행하면 pure virtual function call 에러가 발생되면서 프로그램이 죽는다.





	class A
	{
	public:
		A() {
		}

		void intermediate_call() {
			// Bad: virtual function call during object destruction
			virtual_function();
		}

		virtual void virtual_function() = 0;

		virtual ~A() {
			intermediate_call();
		}
	};

	class B : public A
	{
	public:
		// override virtual function in A
		void virtual_function()
		{
			printf("B::virtual_function called\n");
		}
	};



	B myObject;

	// This call behaves like a normal virtual function call.
	// Print statement shows it invokes B::virtual_function.
	myObject.virtual_function();


메모리릭이 발생하면 디버거를 종료했을 때 이런 메시지가 출력된다.

Detected memory leaks!
Dumping objects ->
{103144} normal block at 0x01C79B18, 12 bytes long.
Data: <            > 18 9B C7 01 18 9B C7 01 CD CD CD CD 

왠 만하면 어느 파일의 몇 번째 줄에서 메모리릭이 발생했다고 알려주지만, 이 경우처럼 디버거가 알려주지 못하는 경우도 많고, for문 안에서 메모리릭이 발생하는 경우처럼 위치만 알아서는 정확히 언제 발생하는지 알기 어려울 때도 있다. 이럴 때 사용할 수 있는 것이 중괄호안에 들어있는 숫자다. 이 숫자는 메모리 할당 번호(Memory Allocation Number)인데, 번호가 103144라는 것은 이 프로그램에서 할당받은 메모리 중에서 103144번째 블록이라는 뜻이다(헉... 내 프로그램이 메모리를 이렇게 많이 할당받았던가 -0-;;).

프로그램 코드의 적당한 위치에 

_crtBreakAlloc = 103144; 
라 고 적어주고 디버거를 실행하면 이 메모리를 할당하려고 할 때 프로그램을 Break 시켜준다. 디버그 버전에서는 힙에 메모리를 할당할 때마다 crtdbg 라이브러리(이렇게 표현해도 되나?)가 이 변수를 체크해서 Break 해주는 것이다. 디버깅중에 Watch 윈도우에서 변수 값을 바꿔서 다른 메모리 할당 번호에서 멈출 수도 있다. 전역 변수 값을 변경하는 대신에

_CrtSetBreakAlloc(103144); 
라고 함수를 호출해주어도 마찬가지 효과가 있다.


MSDN 기술문서 중 "Detecting and Isolating Memory Leaks"를 참고했음.
 
//------------------------------------------------------------------------------------
사용 방법 설명
 

Detected memory leaks!
Dumping objects ->
{103144} normal block at 0x01C79B18, 12 bytes long.
Data: <            > 18 9B C7 01 18 9B C7 01 CD CD CD CD 

추가 헤더 파일 : #include <crtdbg.h>
 
[MFC]
~App::InitInstance() 함수 상위에 아래와 같이 문제가 발생된 메모리 블럭 설정
    ...
 
    _CrtSetBreakAlloc(103144);
    _CrtMemDumpAllObjectsSince(0); 
}
 
[Win32/Console]
main()
{
    ...
    _CrtSetBreakAlloc(103144);
    _CrtMemDumpAllObjectsSince(0); 
}


var myMsgBox=new ActiveXObject("wscript.shell");

myMsgBox.Popup ("Hey, this works")



Visual C++ 2013에서 리소스 ID 충돌 재배치 하는 프로그램 (이전 버전도 됨)

자세한 내용은 제작사 홈페이지 참조

http://www.riverblade.co.uk/products/resorg/downloads.html




ResOrg.7z


Visual Studio 2008 (2010)에서 매크로 동작 안할때 조치 방법


1. 현상

    - Visual Studio의 Windows를 업데이트 한 이후 Visual Studio의 매크로 기능이 동작을 안한다.


2. 원인

    - 2014년 2월 14일 이후에 나온 Windows 업데이트를 적용할 경우 매크로가 작동하지 않는다.

    - 참고 자료 : Visual Studio 2010 Macros Stop Working after February 2014 Windows Update


3. 해결 방법

    1. Visual Studio 2008 혹은 2010을 종료한다.


    2. 다음 3개의 파일을 편집하여 하기 XML 데이터 내용을 추가한다.

        VS2008의 경우 아래와 같다.

 

"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsmsvr.exe.config"

"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsaenv.exe.config"

"C:\Program Files (x86)\Microsoft Visual Studio9.0\Common7\IDE\devenv.exe.config"




        VS2010의 경우 아래와 같다.

 

"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsmsvr10.exe.config"

"C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsaenv10.exe.config"

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config"



    3. 상기 파일을 편집하여 다음 내용 추가

<configuration>

... <runtime> ... <AllowDComReflection enabled="true"/> ... </runtime> ... </configuration>




   3. 개발툴을 재 실행한다.




참고자료 : http://visualstudioextensions.vlasovstudio.com/2014/02/13/visual-studio-2010-macros-stop-working-after-february-2014-windows-update/




COM을 사용하려면 CoInitialize() 함수를 호출해 줘야 하는데

귀찮다.

끝나면 CoUninitialize() 함수도 호출해 줘야 한다.

이걸 클래스로 생성자에 소멸자에 넣어서 쉽게 편하게 쓰자! 

class CCoInitialize
{
public:
	CCoInitialize(void)
	{
		ASSERT(SUCCEEDED(CoInitializeEx(NULL, COINIT_MULTITHREADED)));
	}
	~CCoInitialize(void)
	{
		CoUninitialize();
	}
};

 

 

+ Recent posts