레이어 설명에 앞서서...동적라이브러리 링크

2017. 1. 17. 09:26장비제어개발관한이야기

반응형

 

오늘 포스팅할 주제는 기본적으로 ImMachine[Sequnce] 에서 이전에 설명 Hardware_Layer 구현하고 있는 부분입니다. 코드프로젝트에서 보면 흔하게 있고 아주 오래된 기법입니다.

 

자동 업데이트나 플러그인 처럼 기존 프로그램 수정없이 부분 수정하여 원하는 기능을 얻을 수있습니다.

전체적인 구조 변경없이 DLL 교체를 통해서 업데이트가 가능한 구조입니다.

 

 

구조는 다음과 같습니다.

DLL 구조

 

 

위와 같이 외부의 DLL에 있는 class를 가져다 쓸 경우에는 이 DLL을 로딩하는 상위 프로그램은 표준 인터페이스를 지닌 고정 프로그램으로 만들면 되고,아래의 클래스에 특정 유닛이나 설비 디바이스 구동과 관련된 라이브러리의 구현을 넣게 되면 프로그램이 구조적으로 분리가 됩니다.

이부분이 바로 Hardware_Layer 의 핵심부분입니다.

 

이 밖에 설비상에서 수정이 많지 않은 Log, 알람 Display등.. 이런식의 Interface DLL을 만들어 배포하게 됩니다.

기존에 배포된 프로그램의 기능을 바꾸고 싶을 경우나, 또는 새로운 기능을 추가하고 싶을 경우 배포된 프로그램을 실행파일을 리빌드 하지 않고 DLL 쪽 프로젝트만 수정해서 업데이트가 가능합니다.

 

MSDN 참고소스 

UINT LPFNDLLFUNC1(DWORD dw,UINT uint)
{
HINSTANCE hDLL;               // Handle to DLL
    LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
    DWORD dwParam1;
    UINT  uParam2, uReturnVal;

    hDLL = LoadLibrary("MyDLL");
    if (hDLL != NULL)
    {
        lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "DLLFunc1");
        if (!lpfnDllFunc1)
        {
            // handle the error
            FreeLibrary(hDLL);       
            return SOME_ERROR_CODE;
        }
        else
        {
            // call the function
            uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
        }
    }
}​

 

"MyDLL" 과 "DLLFunc1" 은 일반 텍스트이므로 외부 설정 파일에 넣어둘 수 있습니다.

포토샵 같은 프로그램에 우리가 추가하는 필터와 같은 플러그인들은 설치시에 포토샵 레지스트리에 이렇게 자기를 포함하는 DLL과 해당 펑션에 대한 정보를 설정하고 포토샵 프로그램은 실행 구동 시에 그 설정에 따라 해당 펑션을 가동시키죠.

물론 추가된 프러그인에 대한 정보는 첫 실행시에 포토샵 메뉴에도 자동으로 추가되어 붙을 것이구요...

그리고 유저가 메뉴에서 해당 프로그인을 선택할 경우 포토샵은 지정된 DLL의 지정된 펑션을 실행하면서 플러그인의 동작을 위해 필요한 현재 편집중인 화면의 인터페이스 DC 및 몇가지 표준 인터페이스 정보를 플러그인에 넘겨주게 되겠죠...

플러그인 프로그래머는 그 인터페이스 규약에 맞게 넘어온 정보위에 지신의 코드를 구현하기만 하면 되는 것입니다.

 

이렇게 하는 이유는 기존 프로그램을 수정없이 기능을 수정 가능하게 하는 것이 최종목적입니다.

처음에는 동적업데이트도 가능하기도 해서 선호 하였지만, 실제로 장비제어에 효율적이지 못한 방법이라 생각됩니다.

활용도가 떨어져서 특정한 부분의 Hardware_layer부분에만 적용하게 되었습니다.

 

생각보다 하드웨어는 안바뀌더라구요… 그래도 기본적인 골격은 Layer간의 공통된 인터페이스를 쓴다는 부분은 공통입니다.

 

 

 

 

제가 가지고 있는 자료중에는 카페에서 스크랩을 통해 저장된 부분이 많아 스크랩당시에 표기를 했어야 하는데, 표시가 안된 부분이 많습니다. 혹시나 출처를 아시는분은 답글부탁드립니다.

반응형