GSI

insert  into aaa.dbo.aa select * from bbb.dbo.bb;
-- 이걸 사용하게 되면 다른 DB의 같은 테이블 구조를 가지고 있을때 내용을 복사할 수 있다.

Posted by gsi
:


VS2003에서 InitializeCriticalSectionAndSpinCount 함수를 사용할려고 적용을 해보면
아래와 같은 컴파일 오류가 생긴다.

...\lock.cpp(50): error C3861: 'InitializeCriticalSectionAndSpinCount': 인수 종속성을 조회해도 식별자를 찾을 수 없습니다.

이런 경우는 window.h 이전에 _WIN32_WINNT의 디파인된 내용이 잘못되서 그런거 같다.

mfc의 경우 stdafx.h의 상단에 보면
#ifndef _WIN32_WINNT  // Windows NT 4 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_WINNT 0x400   // Windows 98과 Windows 2000 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif 

이란 부분에 있다.

여기서 0x400 부분을 0x403으로 수정해 주면 해결이 된다.
Posted by gsi
:

// 프로세스 찾기
#include <tlhelp32.h>
bool GetProcessModule(DWORD dwPID, char* sProcessName);

bool ProcessFind(char* strProcessName)
{
    HANDLE         hProcessSnap = NULL;
    BOOL           bRet      = FALSE;
    PROCESSENTRY32 pe32      = {0};

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hProcessSnap == (HANDLE)-1)
        return false;

    pe32.dwSize = sizeof(PROCESSENTRY32);

    //프로세스가 메모리상에 있으면 첫번째 프로세스를 얻는다
    if (Process32First(hProcessSnap, &pe32))
    {
        BOOL          bCurrent = FALSE;
        MODULEENTRY32 me32       = {0};

        do
        {
            bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);
            if(bCurrent)
            {
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
                if(hProcess)
                {
                    // 이 주석을 없애면 프로세스를 죽이는것도 가능하다.
                    //if(TerminateProcess(hProcess, 0))
                    //{
                    //    unsigned long nCode; //프로세스 종료 상태
                    //    GetExitCodeProcess(hProcess, &nCode);
                    //}
                    //printf("process exit\n");
                    CloseHandle(hProcess);
                    return true;
                }
            }
        }
        while (Process32Next(hProcessSnap, &pe32)); //다음 프로세스의 정보를 구하여 있으면 루프를 돈다.
    }
    CloseHandle (hProcessSnap);
    return false;
}

bool GetProcessModule(DWORD dwPID, char* sProcessName)
{
    HANDLE        hModuleSnap = NULL;
    MODULEENTRY32 me32        = {0};
    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);

    if (hModuleSnap == (HANDLE)-1)
        return (FALSE);

    me32.dwSize = sizeof(MODULEENTRY32);

//해당 프로세스의 모듈리스트를 루프로 돌려서 프로세스이름과 동일하면
//true를 리턴한다.

    if(Module32First(hModuleSnap, &me32))
    {
        do
        {
            printf("process name : %s\n", me32.szModule);

   if( strcmp(me32.szModule, sProcessName) == 0 )
   {
    CloseHandle (hModuleSnap);
    return true;
   }
            //if(me32.szModule == sProcessName)
            //{
            //    CloseHandle (hModuleSnap);
            //    return true;
            //}

        }
        while(Module32Next(hModuleSnap, &me32));
    }

    CloseHandle (hModuleSnap);
    return false;
}

----------------- 사용할때 -------------------
 // 런처가 돌고 있는지를 판단한다. (제가 한건 해당 프로세스가 돌고 있는지를 찾는 코드로 재사용 했음)
 if( ProcessFind("CruiseLauncher.exe") == false )
 {
  MessageBox(NULL, "CruiseLauncher가 실행중이지 않습니다.", "오류", MB_OK);
  exit(0);
 }

Posted by gsi
:


이 오류가 뭔지 처음에는 많이 애매했다.
이게 나온 경우는 아래와 같다.

UnitProject로 사용자 정의 컨트롤을 하나 만들었습니다.
그리고 테스트가 제대로 되서
메인 프로젝트에 해당 Xaml, cs 파일의 내용을 그대로 복사

그렇게 했을때 오류가 발생하더라구요.

오류 CS0103: 'InitializeComponent' 이름이 현재 컨텍스트에 없습니다.

왜 나왔냐.. 찾아 보니까 문제는 네임스페이스였습니다.

xaml 코드에서 x:Class="WpfApplication1.ucStartup" 라는 부분이 있었는데
메인 프로젝트의 네임 스페이스는 WpfApplication1 이게 아니였기 때문입니다.

그렇다 보니 cs 파일의 생성자 부분의 'InitializeComponent'  메소드가 네임스페이가 틀리게 되면
호출되지 않게 됩니다.

그러면 'InitializeComponent'  이 메소드는 어디 있는가?

이건 컴파일 타임에서 생성되며 보통 Xaml 파일이 obj/Debug/**.g.cs 파일로 만들어 지는데요.
그 속에 존재를 하게 됩니다.

뭐.. 잘만 하면 나오지 않는 오류이지만, 어떤 오류인지 알고 나니 더 좋다고나 할까요? ^^
Posted by gsi
:

스토리 보드를 사용할때 에니메이션이 끝나고 다른걸 처리 하는 경우가 많다.
<Storyboard x:Key = "ZoomInImage" Completed = "ZoomFinished">
...

위와 같은 코드가 xaml 파일에 존재 하면
cs 파일에는 Completed의 이벤트 메소드가 선언되어 있어야 한다. (블랜드에서도 자동으로 생성하게 된다.)

private void ZoomFinished(object sender, EventArgs e)
{
Window1 parentWindow = Window.GetWindow(this) as Window1;
parentWindow.UpdateDisplay(FolderPath);
}

위와 같이 sender로 전달되어온 Storyboard 의 부모 윈도우를 얻을때 GetWindow() 를 통해서
가져올 수 있다.
Posted by gsi
: