'함수'에 해당되는 글 2건

  1. 2009.04.27 DllMain
  2. 2008.01.24 GetCtrlVal() 함수
2009. 4. 27. 11:43

DllMain



DLL은 함수들의 집합이므로 함수에 대한 정의만 있으면 되고 일반적인 실행파일의 WinMain과 같은 메인함수가 꼭 있어야 하는것은 아니다. 엄밀히 말하자면 DLL도 반드시 Main이라는 엔트리포인트가 필요하지만, VC++를 사용할 경우 C런타임이 엔트리 포인트를 대신 제공하기 때문에 없어도 상관이 없다는 것이다.

DLL이 단순한 함수의 집합이 아니라면 DLL의 엔트리 포인트 DllMain이 필요하다. 전역변수가 있다거나 동적으로 메모리를 할당해 사용한다거나 할 때 초기화와 종료 처리를 위해 필요하다.

BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpRes);

hInst는 DLL의 인스턴스 핸들이다.
fdwReason은 이 함수가 호출된 이유를 지정한다.(일종의 통지 메시지)
  DLL_PROCESS_ATTACH
  - DLL이 프로세스의 주소공간에 맵핑될 때 호출된다.
    주로 메모리를 할당하거나 시스템 전역 핸들을 초기화하는 용도로 사용된다.
  DLL_PROCESS_DETACH
  - DLL이 프로세스의 주소 공간에서 분리될 때 호출된다.
    할당한 메모리를 해제하거나 시스템 전역 핸들을 파괴하는 용도로 사용된다.
  DLL_THREAD_ATTACH
  - DLL을 사용하는 프로세스에서 스레드를 생성할 때마다 이 값과 함께 DllMain함수가 호출된다.
    DLL에서는 이 값을 받았을 때 스레드별 초기화를 수행한다.
  DLL_THREAD_DETACH
  - DLL을 사용하는 프로세스에서 스레드가 종료될 때마다 이 값과 함께 DllMain 함수가 호출된다.
    DLL에서는 이 값을 받았을 때 스레드별 종료 처리를 한다.
lpRes는 DLL의 연결 방식을 지정한다.
  TRUE - 암시적 연결
  FALSE - 명시적 연결

BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpRes)
{
    switch(fdwReason) {
        case DLL_PROCESS_ATTACH:
            ...
            break;

        case DLL_PROCESS_DETACH:
            ...
            break;

        case DLL_THREAD_ATTACH:           
            ...
            break;

        case DLL_THREAD_DETACH:
            ...
            break;
    }
    return TRUE;
}

이런 식으로 구현을 해주면 된다.
해당하는 통지 메시지가 전달 될 때 필요한 작업을 넣어준다. 가만히 보고 있자면 하는 일이 WndProc와 비슷한것 같다면서.. ^^;


'Programmings > Windows Programming' 카테고리의 다른 글

GetWindowThreadProcessId()  (0) 2009.05.18
GetModuleFileNameEx()  (0) 2009.05.15
DLL 제작 (Explicit)  (0) 2009.04.24
DLL 제작 (Implicit 연결)  (0) 2009.04.23
DLL 이란...  (0) 2009.04.23
2008. 1. 24. 18:05

GetCtrlVal() 함수



GetCtrlVal()함수는 해당 컨트롤의 값을 받아오는 함수이다.
다시말해서 수치컨트롤, 문자열컨트롤, 버튼컨트롤 등의 값을 읽어올 때 사용하는 CVI함수이다.

이와 반대로 컨트롤에 값을 기록할 때에는 SetCtrlVal()함수를 사용한다.

관련된 함수 정보는 NI LabWindows/CVI Help를 검색해보면 아래와 같은 정보를 얻을 수 있다.

GetCtrlVal

int GetCtrlVal (int panelHandle, int controlID, void *value);

Purpose

Obtains the current value of a control.

When the control ID is for a list box or ring control, GetCtrlVal returns the value of the currently selected list item. To obtain the index of the selected list item, use GetCtrlIndex.

Note   This function is not valid for graph and strip chart controls.

Parameters

Input
Name Type Description
panelHandle integer Specifier for a particular panel that is currently in memory. You obtain this handle from LoadPanel, NewPanel, or DuplicatePanel.
controlID integer The defined constant, located in the .uir header file, that you assigned to the control in the User Interface Editor, or the ID returned by NewCtrl or DuplicateCtrl.
Output
Name Type Description
value void * The control value. The data type of value must match the data type of the control.

Return Value

Name Type Description
status integer Return value indicating whether the function was successful. A negative number indicates that an error occurred.


참고 : CVI 정보나눔, NI LabWindows/CVI Help


'Programmings > CVI' 카테고리의 다른 글

CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
LabWindows/CVI에서 Win32 API를 사용하는 방법  (0) 2008.01.18
CVI 첫번 째 프로그램 - Hello world  (0) 2008.01.15
CVI 설치  (0) 2008.01.15