본 자료는
1. C#, VB.NET에서 제공하는 기능을 C++에서 사용하는 방법
2. 외부 실행 파일 간접 호출 방법
3. 구현 방법
3-1. [Side-A] C++에서 외부 실행 파일을 호출하는 방법
3-2. [Side-B] C#에서 명령인자에 따라 특정 기능을 호출하는 방법
순서로 진행합니다.
SmartX Framework 기능 중 C#, VB.NET에서만 제공하는 기능은 C++(MFC or API)에서 사용할 수 없습니다. 예를 들어 IEC-Series의 LCD를 OFF 하고자 하는 경우, 해당 기능은 C#, VB.NET에서만 지원하는 기능으로 C++(MFC or API)에서는 사용할 수 없습니다. 이외에도 C#, VB.NET에서만 사용할 수 있는 IEC-Series Reboot, 마우스 커서 제어, 백라이트 LCD ON/OFF 제어, 메모리 체크 등의 기능들은 C#, VB.NET(SmartX Framework)를 사용 시에만 사용할 수 있는 기능들입니다. 본 문서는 이러한 기능들 중 마우스 커서를 숨기는 기능을 예로 들어 C++에서 사용할 수 있는 방안을 제시합니다.
Ex) SmartForm, SmartButton, SmartUpDown 등등
1. C#, VB.NET에서 제공하는 기능을 C++에서 사용하는 방법
C++(MFC or API)에서는 외부의 실행 파일을 호출하여 사용할 수 있는 기능이 있습니다. 해당 기능을 사용하면 C++(MFC or API)에서도 C#, VB.NET(SmartX Framework의 기능)을 사용할 수 있습니다. 단, 해당 기능을 위해서는 해당 기능을 적용한 C#, VB .NET 프로젝트(외부 실행 파일)이 필요합니다. 자세한 구현 방법은 다음 내용들을 확인해 보시기 바랍니다.
2. 외부 실행 파일 간접 호출 방법
외부 실행 파일을 간접 호출하기 위해서는 [Side-A] C++(MFC) 프로그램과 [Side-B] C#, VB.Net 프로그램의 2가지 분류가 필요합니다.
- [Side-A]는 C++(MFC)로 개발된 Main 프로그램으로 외부 실행 파일을 호출(Call)하며 인자를 전달하여 세부적인 제어 처리 기능을 합니다.
- [Side-B]는 C# 또는 VB.NET으로 개발된 독립적인 실행 파일으로, UI가 없으며 명령인자를 전달받아 SmartX의 특정 기능을 호출합니다.
아래 그림 및 내용과 "3. 구현 방법" 내용을 확인해 보시기 바랍니다.
- [Side-A] C++(MFC) 프로그램을 작성합니다.
1. 생성된 C# 또는 VB.NET 실행 파일을 C++(MFC or API)에서 호출하기 위해 윈도우에서 제공하는 API 함수인 CreateProcess() 함수를 사용합니다.
2. CreateProcess() 함수 사용 시 인자값으로 [STEP-1]에서 저장한 실행 파일의 위치를 지정하고, 명령어를 전달합니다.
- [Side-B] C# 또는 VB .NET 개발언어로 SmartX Framework를 사용해 프로그램을 작성합니다.
1. 메인 프로그램은 C++ 프로그램이므로 C#, VB.NET 프로그램 작성 시 UI를 구현하지 않고 Program.cs 파일이나 별도의 콘솔 또는 Module에서 기능을 수행하도록 프로그램을 작성합니다.
2. C#, VB .NET 프로그램은 C++에서 구현할 수 없는 기능으로 구현합니다. SmartX Framework의 기능을 사용하는 경우 관련 DLL 파일의 참조가 필요합니다.
3. Main() 메소드의 args 인자를 활용해 C++ 프로그램으로부터 전달받은 명령어에 따라 기능을 수행할 수 있도록 합니다.
4. 생성한 실행 파일을 저장소에 저장합니다. SmartX Framework의 기능을 사용하는 경우 관련 DLL 파일도 함께 복사합니다.
3. 구현 방법
구현 방법은 제어판 및 C++ 프로그램에서 지원하지 않는 마우스 커서를 보이게 하거나 숨기는 기능을 SmartX Framework에 기능을 통해 구현하는 방법을 예시로 하였으며, [Side-A] 파트(C++)와 [Side-B] 파트(C#)의 구현 방법을 설명합니다.
3-1. [Side-A] C++에서 외부 실행 파일을 호출하는 방법
C++ 프로그램 구현 시 외부 호출 기능이 필요할 때 CreateProcess() 함수에 인자값을 지정해 호출하도록 구현하면 되며 자세한 사용법은 아래 CreateProcess() 함수 설명 및 사용법을 참고하시기 바랍니다.
함수 | CreateProcess(LPCWSTR pszImageName, LPCWSTR pszCmdLine, LPSECURITY_ATTRIBUTES psaProcess, LPSECURITY_ATTRIBUTES psaThread, BOOL fInheritHandles, DWORD fdwCreate, LPVOID pvEnvironment, LPWSTR pszCurDir, LPSTARTUPINFO psiStartInfo, LPPROCESS_INFORMATION pProcInfo) |
---|---|
분류 | ★ LPCWSTR pszImageName : 경로를 포함한 실행 파일 ★ LPCWSTR pszCmdLine : 명령행 인수 LPSECURITY_ATTRIBUTES psaProcess : 프로세스 커널 오브젝트의 보안 속성을 설정 LPSECURITY_ATTRIBUTES psaThread : 스레드 커널 오브젝트의 보안 속성을 설정 BOOL fInheritHandles : 상속 여부를 결정 DWORD fdwCreate : 프로세스의 플래그 설정 LPVOID pvEnvironment : 환경 변수 문자열을 포함하고있는 메모리 블록을 가리키는 포인터를 지정 LPWSTR pszCurDir : 현재 드라이브와 디렉토리를 설정 LPSTARTUPINFO psiStartInfo : STARTUPINFO나 STARTUPINFOEX 구조체를 가리키는 포인터를 지정 ※ 위 인자 중 ★ 표시된 인자를 변경하여 사용하시기 바랍니다. |
CreateProcess() 함수 사용법의 예시 코드는 SmartX의 SmartConfigs 기능을 사용해 마우스 커서를 보이거나 숨기는 기능을 구현한 [Side-B] 프로그램을 호출(Call)하는 코드로 작성되었습니다.
[C++] CreateProcess() 함수 사용법 |
---|
// 마우스 커서 보이기 기능을 하는 C# 실행 파일 호출 소스 코드 CreateProcess(L"Flash Disk₩₩Run₩₩Temp₩₩MouseCursor_ShowHide", L"SHOW", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); // L"SHOW" 부분은 호출되는 프로그램에 전달할 명령어로서 원하는 기능(여기서는 마우스 커서 보이기)을 호출 가능합니다. // 마우스 커서 숨기기 기능을 하는 VB .NET 실행 파일 호출 소스 코드 CreateProcess(L"Flash Disk\\Run\\Temp\\MouseCursor_ShowHide_VB", L"HIDE", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); // L"HIDE" 부분은 호출되는 프로그램에 전달할 명령어로서 원하는 기능(여기서는 마우스 커서 숨기기)을 호출 가능합니다. |
3-2. [Side-B] C#에서 명령인자에 따라 특정 기능을 호출하는 방법
C# 프로그램을 구현하기 위한 방법으로는 장치 응용 프로그램으로 프로젝트를 생성하는 방법과 콘솔 응용 프로그램으로 프로젝트를 생성하는 방법이 있습니다. 아래 STEP은 프로젝트를 생성하는 방법부터, 명령어를 전달받은 후 SmartX의 기능 중 SmartConfigs의 MouseCursor 속성을 사용해 마우스 커서를 보이게 하거나 숨기는 기능을 구현하는 순서를 설명하고 있습니다. 이 외에도 다양한 SmartX의 기능들을 구현할 수 있으므로 다양하게 응용해 보시기 바랍니다.
STEP-1 | [Smart Device]-[Smart Device Project(스마트 장치 프로그램)] 선택 |
---|---|
STEP-2 | 템플릿(Template) 설정 후 프로젝트 생성하기 |
---|---|
CASE에 따라 선택해야 하는 항목이 다르므로 아래 그림을 확인하시기 바랍니다. | |
|
STEP-3 | 코드 작성하기 |
---|---|
Program.cs 파일의 Main() 메소드에 args 인자값으로 전달받은 명령어에 따른 처리 코드를 작성합니다. 장치 응용 프로그램을 사용하는 경우 UI를 사용하지 않는 프로그램이므로, Program.cs 파일의 코드 중 Application.Run(new Form1());를 주석 처리 후 코드를 작성합니다. | |
// MouseCursor_Program_CS 프로젝트의 Program.cs 소스 코드 namespace MouseCursor_ShowHide { static class Program
}
{ [MTAThread]
}static void Main(string[] args) { // ***[중요]*** 장치 응용 프로그램 프로젝트인 경우,
}// 반드시 Application.Run(new Form1()); 코드를 주석 처리해야 합니다. // Application.Run(new Form1()); 주석 처리 // 마우스 커서 관련 기능을 수행하기 위해 SmartX Framework 기능을 사용 SmartConfigs smartconfig1 = new SmartConfigs(); // 명령어로 전달받은 인자에 따라 기능 처리 if(args[0]=="SHOW") { // 마우스 커서 보이기
}smartconfig1.Display.MouseCursor = CDisplay.OnOff.ON; else if (args[0] == "HIDE") { // 마우스 커서 숨기기
}smartconfig1.Display.MouseCursor = CDisplay.OnOff.OFF; |