C#에서 C++의 CString 값 전달해 주기C#에서 C++의 CString 값 전달해 주기

Posted at 2011.11.08 00:32 | Posted in About Programing/03. Tip

출처 : http://blog.naver.com/just720?Redirect=Log&logNo=40137298010

C# 에서는 이렇게 쓸꺼야

일단 선언은 이렇게 하고

[DllImport("CV_capture.dll")]
public static extern void CV_RegistInit(IntPtr _IntPtr);

넘겨 줄때는 이렇게!
IntPtr _IntPtr = Marshal.StringToBSTR("abcd");
CV_RegistInit(_IntPtr);

C++에서는 BSTR로 받아서 CString으로 변환해준다.

extern "C" __declspec(dllexport) void __stdcall CV_RegistInit(BSTR _RegistName)
{

CString str;

str.Format(_T("%s"), RegistName);

}

음 잘 넘어온다! ㅋㅋ

저작자 표시 비영리 변경 금지
신고
  1. 옛날에 저걸로 데스스타를 만들며 놀던 기억이 나네요...
    이참에 저걸로 스타크래프트 유닛을 만들어서 대량구매를 해볼까요;

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Register variable (레지스터 변수)Register variable (레지스터 변수)

Posted at 2011.07.03 15:06 | Posted in About Programing/03. Tip


출처 : 클릭

 레지스터 변수(Register variable)는 프로세서의 레지스터에서 처리되는 변수를 말합니다. 
레지스터는 CPU 안에 있는 메모리로써, 기계어 한 두개 수준에서 직접 처리가 되므로 프로그램의 수행 속도를 향상시킬 수 있습니다. 
 따라서 프로그램의 수행에서 가장 영향을 주는 변수를 레지스터 변수로 선언하여 사용하면 프로그램 속도를 비약적으로 향상시킬 수 있는 경우가 있습니다.
 
 하지만 register를 붙인다고 꼭 레지스터 변수로 선언되는 것은 아닙니다.
 경우에 따라서는 남는 레지스터가 없을 수도 있으므로 여기서 말하는 레지스터는 컴파일러에게 반드시 그렇게 선언하라고 요구하는 의미보다는,
  
"가능하면 레지스터로 처리하라" 는 정도의 약한 의미에 불과합니다.
  
 레지스터 변수를 선언하려면 변수를 선언할 때 앞에 register를 붙이면 됩니다.
레지스터 변수 선언은 지역 변수(Local variable)로만 선언할 수 있고 전역 변수(Global Variable)로는 선언할 수 없습니다.
 
register int k;
 
의 경우는 k라는 정수형 변수를 가능하면 레지스터 변수로 선언하라는 뜻이 되겠네요.

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

RegQueryValueEx 함수RegQueryValueEx 함수

Posted at 2010.05.23 16:29 | Posted in About Programing/03. Tip
레지스트리 키를 이용하여 데이터를 얻을 때 사용한다.

LONG RegQueryValueEx( 
  HKEY hKey, 
  LPCWSTR lpValueName, 
  LPDWORD lpReserved, 
  LPDWORD lpType, 
  LPBYTE lpData, 
  LPDWORD lpcbData 
); 
HKEY hKey : RegOpenKey 함수로 얻은 key 값
LPCWSTR lpValueName : 아래 그림의 [이름]에 해당하는 값



LPDWORD lpReserved : NULL
LPDWORD lpType : 얻고자 하는 데이터의 자료형을 얻고자 할때
(모를때 : NULL / 알고 있을 때 : DWORD)
LPBYTE lpDatalpValueName 의 데이터를 얻고 싶을 때 (LPTYPE)형으로 데이터를 얻는다.
LPDWORD lpcbDatalpData 변수에 사용한 메모리 공간의 크기를 얻는다.
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[MFC] 다른이름으로 저장하기 창 생성[MFC] 다른이름으로 저장하기 창 생성

Posted at 2010.04.22 23:59 | Posted in About Programing/03. Tip
void CUserClass::Save(void)
{
	static char BASED_CODE szFilter[] = "한글 Files (*.hwp)|*.hwp||";
	CFileDialog dlg (FALSE, "*.hwp", "*.hwp", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);

	if (dlg.DoModal () == IDOK)
	{

	}
}
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

외부 프로그램 실행 방법외부 프로그램 실행 방법

Posted at 2010.04.21 22:50 | Posted in About Programing/03. Tip

 

SHELLEXECUTEINFO sei;

 memset(&sei, 0, sizeof(sei));

 sei.cbSize = sizeof(sei);
 sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_DDEWAIT; 
 sei.lpFile = "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE";
 sei.hwnd = NULL;
 sei.lpVerb = "open";
 sei.nShow = SW_SHOWMINIMIZED;

ShellExecuteEx(&sei);
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

MFC MDI에서 Child Window를 최대화로 시작하기MFC MDI에서 Child Window를 최대화로 시작하기

Posted at 2010.04.19 02:54 | Posted in About Programing/03. Tip
  virtual void ActivateFrame(int nCmdShow) 
   { 
       // if another window is open, use default 
       if(GetMDIFrame()->MDIGetActive()) 
           CMDIChildWnd::ActivateFrame(nCmdShow); 
       else // else open maximized. 
           CMDIChildWnd::ActivateFrame(SW_SHOWMAXIMIZED); 
   } 
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Thead를 이용한 암호화 / 복호화Thead를 이용한 암호화 / 복호화

Posted at 2010.04.11 21:17 | Posted in About Programing/03. Tip

저작자 표시 비영리 변경 금지
신고
  1. 행인
    파일 공유 하면 않되나여?

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

일의 자리에서 반올림 , 올림 , 버림일의 자리에서 반올림 , 올림 , 버림

Posted at 2010.04.05 14:17 | Posted in About Programing/03. Tip

(1) 일의자리에서 버림
버림: 123 일때 120 , 128 에서도 120 , ....

123 을 10 으로 나눈 몫은 12 이고 나머지는 3

  • 123 / 10 --> 12
  • 123 % 10 --> 3
123 - 123%10 을 하면 120 이 나옵니다.

다른 방법으로

  1. 123 을 10 으로 나눈 몫이 12 .. 123 / 10
  2. 여기에 10 을 곱하면 120 .. 123 / 10 * 10

참고로 이 성질을 이용하면 123 % 10 은 123 - 123/10*10 과 같은 표현입니다.

(2) 일의 자리에서 반올림
반올림:123 에서 120 , 125 에서는 130 , 128 에서 130

수의 일의 자리에 5 를 더하면 5 이상의 수는 십이 자리로 올라가고 5 보다 작은 수는 올라가지 않습니다.

  • (123 + 5)/10 * 10 --> 120
  • (125 + 5)/10 * 10 --> 130
  • (128 + 5)/10 * 10 --> 130
(3) 일의 자리에서 올림
올림: 120 에서 120 , 121 에서 130 , 125 에서 130

1 이상 부터 올라가야 하니 9 를 더하면 1 이상의 수는 십의 자리로 올림이 이루어집니다.

  • (120 + 9)/10*10 --> 120
  • (121 + 9)/10*10 --> 130
  • (128 + 9)/10*10 --> 130
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

int main(void)는 이제 그만!int main(void)는 이제 그만!

Posted at 2010.04.05 12:59 | Posted in About Programing/03. Tip

출처 : http://mwultong.blogspot.com/2006/12/c-argc-argv-main-function-parameter.html

각 함수에는 인수(파라미터)를 지정할 수 있습니다. 프로그램 본체인 main() 함수에도 당연히 인수를 지정할 수 있습니다. 메인 함수의 인수는, 운영체제에서 그 프로그램을 실행할 때 지정해 준 "옵션"입니다.

예를 들어 도스창(명령 프롬프트;CMD.EXE)에서

dir /?

이렇게 하면 dir 명령에 대한 도움말이 출력됩니다. 이때 "/?" 라는 문자열이 옵션이 되는 것입니다.

main(int argc, char* argv[])
에서

argc 는, 프로그램을 실행할 때 지정해 준 "명령행 옵션"의 "개수"가 저장되는 곳입니다.
argv 는, 프로그램을 실행할 때 지정해 준 "명령행 옵션의 문자열들"이 실제로 저장되는 배열입니다.


다음 예제를 보면 쉽습니다.

int argc, char* argv[] 사용법 예제; main() Option Example

 

#include 
#include   // exit()

int main(int argc, char* argv[])
{
	// 옵션 지정하지 않았을 때 에러 출력하고 종료
	if (argc == 1)
	{
		fputs("에러! 옵션을 입력하지 않으셨군요...\n", stderr);
		exit(1);
	}

	// 옵션 개수 출력
	printf("%d 개의 옵션을 입력하셨군요\n\n", argc - 1);

	// 옵션 배열의 요소들을 하나씩 출력
	for (int i = 1; i < argc; i++)
		printf("argv[%d] = %s\n", i, argv[i]);

	return 0;
}
옵션을 하나도 입력하지 않으면 argc 는 1이 됩니다. 즉 argc 는 항상 1 이상입니다. 0이 되지 않습니다.

위의 경우, argv[0]은 0.exe 가 됩니다. 즉 argv 의 첫번째 요소는 항상 "프로그램 자신의 파일명"입니다.

따라서 옵션의 정확한 개수를 구하려면 argc 에서 1을 마이너스해 주어야 합니다.


Q: 비주얼C (VC++) 에서만 되나요?

모든 C컴파일러에서 다 됩니다.






envp 라는 이름의, 3번째 파라미터도 있습니다: ▶▶ C언어 VC++] 컴퓨터 환경변수 구하기/출력 방법; Get-Print Environment Variable
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

MFC Dialog 꽉찬 화면MFC Dialog 꽉찬 화면

Posted at 2010.02.20 14:58 | Posted in About Programing/03. Tip
BOOL PlayGameForm::OnInitDialog()
{
	CDialog::OnInitDialog();

	HWND m_hwnd = this->m_hWnd;

	LONG style = ::GetWindowLong( m_hWnd, GWL_STYLE );

	style &= ~WS_CAPTION;
	style &= ~WS_SYSMENU;

	::SetWindowLong( m_hWnd, GWL_STYLE, style );
	int screenx = GetSystemMetrics( SM_CXSCREEN );
	int screeny = GetSystemMetrics( SM_CYSCREEN );

	// resize:
	SetWindowPos( NULL, -4, -4, screenx+8, screeny+4, SWP_NOZORDER ); 

	return TRUE;
}
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

티스토리 툴바