Browse Source

add files

master
Ian Ilkyun Oh 11 months ago
parent
commit
2c84f1cd70
  1. 28
      TestLibDlg/TestLibDlg.sln
  2. 87
      TestLibDlg/TestLibDlg/DlgProxy.cpp
  3. 43
      TestLibDlg/TestLibDlg/DlgProxy.h
  4. BIN
      TestLibDlg/TestLibDlg/TestLibDlg.aps
  5. 153
      TestLibDlg/TestLibDlg/TestLibDlg.cpp
  6. 33
      TestLibDlg/TestLibDlg/TestLibDlg.h
  7. 29
      TestLibDlg/TestLibDlg/TestLibDlg.idl
  8. BIN
      TestLibDlg/TestLibDlg/TestLibDlg.rc
  9. 17
      TestLibDlg/TestLibDlg/TestLibDlg.reg
  10. 240
      TestLibDlg/TestLibDlg/TestLibDlg.vcxproj
  11. 75
      TestLibDlg/TestLibDlg/TestLibDlg.vcxproj.filters
  12. 6
      TestLibDlg/TestLibDlg/TestLibDlg.vcxproj.user
  13. 519
      TestLibDlg/TestLibDlg/TestLibDlgDlg.cpp
  14. 64
      TestLibDlg/TestLibDlg/TestLibDlgDlg.h
  15. 226
      TestLibDlg/TestLibDlg/TestLibDlg_h.h
  16. 84
      TestLibDlg/TestLibDlg/TestLibDlg_i.c
  17. 60
      TestLibDlg/TestLibDlg/framework.h
  18. 5
      TestLibDlg/TestLibDlg/pch.cpp
  19. 13
      TestLibDlg/TestLibDlg/pch.h
  20. BIN
      TestLibDlg/TestLibDlg/res/TestLibDlg.ico
  21. BIN
      TestLibDlg/TestLibDlg/res/TestLibDlg.rc2
  22. 23
      TestLibDlg/TestLibDlg/resource.h
  23. 8
      TestLibDlg/TestLibDlg/targetver.h

28
TestLibDlg/TestLibDlg.sln

@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35707.178 d17.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestLibDlg", "TestLibDlg\TestLibDlg.vcxproj", "{FC9D3553-56B2-4453-AB34-94CF67213CE2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Debug|x64.ActiveCfg = Debug|x64
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Debug|x64.Build.0 = Debug|x64
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Debug|x86.ActiveCfg = Debug|Win32
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Debug|x86.Build.0 = Debug|Win32
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Release|x64.ActiveCfg = Release|x64
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Release|x64.Build.0 = Release|x64
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Release|x86.ActiveCfg = Release|Win32
{FC9D3553-56B2-4453-AB34-94CF67213CE2}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

87
TestLibDlg/TestLibDlg/DlgProxy.cpp

@ -0,0 +1,87 @@

// DlgProxy.cpp: 구현 파일
//
#include "pch.h"
#include "framework.h"
#include "TestLibDlg.h"
#include "DlgProxy.h"
#include "TestLibDlgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTestLibDlgDlgAutoProxy
IMPLEMENT_DYNCREATE(CTestLibDlgDlgAutoProxy, CCmdTarget)
CTestLibDlgDlgAutoProxy::CTestLibDlgDlgAutoProxy()
{
EnableAutomation();
// 자동화 개체가 활성화되어 있는 동안 계속 애플리케이션을 실행하기 위해
// 생성자에서 AfxOleLockApp를 호출합니다.
AfxOleLockApp();
// 애플리케이션의 주 창 포인터를 통해 대화 상자에 대한
// 액세스를 가져옵니다. 프록시의 내부 포인터를 설정하여
// 대화 상자를 가리키고 대화 상자의 후방 포인터를 이 프록시로
// 설정합니다.
ASSERT_VALID(AfxGetApp()->m_pMainWnd);
if (AfxGetApp()->m_pMainWnd)
{
ASSERT_KINDOF(CTestLibDlgDlg, AfxGetApp()->m_pMainWnd);
if (AfxGetApp()->m_pMainWnd->IsKindOf(RUNTIME_CLASS(CTestLibDlgDlg)))
{
m_pDialog = reinterpret_cast<CTestLibDlgDlg*>(AfxGetApp()->m_pMainWnd);
m_pDialog->m_pAutoProxy = this;
}
}
}
CTestLibDlgDlgAutoProxy::~CTestLibDlgDlgAutoProxy()
{
// 모든 개체가 OLE 자동화로 만들어졌을 때 애플리케이션을 종료하기 위해
// 소멸자가 AfxOleUnlockApp를 호출합니다.
// 이러한 호출로 주 대화 상자가 삭제될 수 있습니다.
if (m_pDialog != nullptr)
m_pDialog->m_pAutoProxy = nullptr;
AfxOleUnlockApp();
}
void CTestLibDlgDlgAutoProxy::OnFinalRelease()
{
// 자동화 개체에 대한 마지막 참조가 해제되면
// OnFinalRelease가 호출됩니다. 기본 클래스에서 자동으로 개체를 삭제합니다.
// 기본 클래스를 호출하기 전에 개체에 필요한 추가 정리 작업을
// 추가하세요.
CCmdTarget::OnFinalRelease();
}
BEGIN_MESSAGE_MAP(CTestLibDlgDlgAutoProxy, CCmdTarget)
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CTestLibDlgDlgAutoProxy, CCmdTarget)
END_DISPATCH_MAP()
// 참고: IID_ITestLibDlg에 대한 지원을 추가하여
// VBA에서 형식 안전 바인딩을 지원합니다.
// 이 IID는 .IDL 파일에 있는 dispinterface의 GUID와 일치해야 합니다.
// {3d30aa0d-19ce-4ca6-92b1-70a7403d578c}
static const IID IID_ITestLibDlg =
{0x3d30aa0d,0x19ce,0x4ca6,{0x92,0xb1,0x70,0xa7,0x40,0x3d,0x57,0x8c}};
BEGIN_INTERFACE_MAP(CTestLibDlgDlgAutoProxy, CCmdTarget)
INTERFACE_PART(CTestLibDlgDlgAutoProxy, IID_ITestLibDlg, Dispatch)
END_INTERFACE_MAP()
// IMPLEMENT_OLECREATE2 매크로가 이 프로젝트의 pch.h에 정의됩니다.
// {faa0893c-64ec-4ba5-b1f0-18ed8cb7f106}
IMPLEMENT_OLECREATE2(CTestLibDlgDlgAutoProxy, "TestLibDlg.Application", 0xfaa0893c,0x64ec,0x4ba5,0xb1,0xf0,0x18,0xed,0x8c,0xb7,0xf1,0x06)
// CTestLibDlgDlgAutoProxy 메시지 처리기

43
TestLibDlg/TestLibDlg/DlgProxy.h

@ -0,0 +1,43 @@

// DlgProxy.h: 헤더 파일
//
#pragma once
class CTestLibDlgDlg;
// CTestLibDlgDlgAutoProxy 명령 대상
class CTestLibDlgDlgAutoProxy : public CCmdTarget
{
DECLARE_DYNCREATE(CTestLibDlgDlgAutoProxy)
CTestLibDlgDlgAutoProxy(); // 동적 만들기에 사용되는 protected 생성자입니다.
// 특성입니다.
public:
CTestLibDlgDlg* m_pDialog;
// 작업입니다.
public:
// 재정의입니다.
public:
virtual void OnFinalRelease();
// 구현입니다.
protected:
virtual ~CTestLibDlgDlgAutoProxy();
// 생성된 메시지 맵 함수
DECLARE_MESSAGE_MAP()
DECLARE_OLECREATE(CTestLibDlgDlgAutoProxy)
// 생성된 OLE 디스패치 맵 함수
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
};

BIN
TestLibDlg/TestLibDlg/TestLibDlg.aps

Binary file not shown.

153
TestLibDlg/TestLibDlg/TestLibDlg.cpp

@ -0,0 +1,153 @@

// TestLibDlg.cpp: 애플리케이션에 대한 클래스 동작을 정의합니다.
//
#include "pch.h"
#include "framework.h"
#include "TestLibDlg.h"
#include "TestLibDlgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTestLibDlgApp
BEGIN_MESSAGE_MAP(CTestLibDlgApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CTestLibDlgApp 생성
CTestLibDlgApp::CTestLibDlgApp()
{
// 다시 시작 관리자 지원
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: 여기에 생성 코드를 추가합니다.
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
}
// 유일한 CTestLibDlgApp 개체입니다.
CTestLibDlgApp theApp;
const GUID CDECL BASED_CODE _tlid =
{0xe6371bfe,0x4bde,0x4d88,{0xb4,0x04,0x1d,0x2f,0x22,0x2f,0x1d,0xdf}};
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;
// CTestLibDlgApp 초기화
BOOL CTestLibDlgApp::InitInstance()
{
// Windows XP에서는 InitCommonControlsEx()를 필요로 합니다.
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다.
// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 응용 프로그램에서 사용할 모든 공용 컨트롤 클래스를 포함하도록
// 이 항목을 설정하십시오.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
// OLE 라이브러리를 초기화합니다.
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 대화 상자에 셸 트리 뷰 또는
// 셸 목록 뷰 컨트롤이 포함되어 있는 경우 셸 관리자를 만듭니다.
CShellManager *pShellManager = new CShellManager;
// MFC 컨트롤의 테마를 사용하기 위해 "Windows 원형" 비주얼 관리자 활성화
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
// 표준 초기화
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
// 아래에서 필요 없는 특정 초기화
// 루틴을 제거해야 합니다.
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
// 적절한 내용으로 수정해야 합니다.
SetRegistryKey(_T("로컬 애플리케이션 마법사에서 생성된 애플리케이션"));
// 자동화 또는 reg/unreg 스위치에 대한 명령줄을 구문 분석합니다.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 응용 프로그램이 /Embedding 또는 /Automation 스위치로 시작되었습니다.
// 응용 프로그램을 자동화 서버로 실행합니다.
if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated)
{
// CoRegisterClassObject()를 통해 클래스 팩터리를 등록합니다.
COleTemplateServer::RegisterAll();
}
// 응용 프로그램이 /Unregserver 또는 /Unregister 스위치로 시작되었습니다. 레지스트리에서 항목을
// 제거합니다.
else if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppUnregister)
{
COleObjectFactory::UpdateRegistryAll(FALSE);
AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor);
return FALSE;
}
// 응용 프로그램이 독립 실행형으로 시작되었거나 다른 스위치로 시작되었습니다(예: /Register
// 또는 /Regserver). typelibrary를 포함하여 레지스트리 항목을 업데이트합니다.
else
{
COleObjectFactory::UpdateRegistryAll();
AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppRegister)
return FALSE;
}
CTestLibDlgDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 여기에 [확인]을 클릭하여 대화 상자가 없어질 때 처리할
// 코드를 배치합니다.
}
else if (nResponse == IDCANCEL)
{
// TODO: 여기에 [취소]를 클릭하여 대화 상자가 없어질 때 처리할
// 코드를 배치합니다.
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "경고: 대화 상자를 만들지 못했으므로 애플리케이션이 예기치 않게 종료됩니다.\n");
TRACE(traceAppMsg, 0, "경고: 대화 상자에서 MFC 컨트롤을 사용하는 경우 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS를 수행할 수 없습니다.\n");
}
// 위에서 만든 셸 관리자를 삭제합니다.
if (pShellManager != nullptr)
{
delete pShellManager;
}
#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
ControlBarCleanUp();
#endif
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고 응용 프로그램을 끝낼 수 있도록 FALSE를
// 반환합니다.
return FALSE;
}
int CTestLibDlgApp::ExitInstance()
{
AfxOleTerm(FALSE);
return CWinApp::ExitInstance();
}

33
TestLibDlg/TestLibDlg/TestLibDlg.h

@ -0,0 +1,33 @@

// TestLibDlg.h: PROJECT_NAME 애플리케이션에 대한 주 헤더 파일입니다.
//
#pragma once
#ifndef __AFXWIN_H__
#error "PCH에 대해 이 파일을 포함하기 전에 'pch.h'를 포함합니다."
#endif
#include "resource.h" // 주 기호입니다.
// CTestLibDlgApp:
// 이 클래스의 구현에 대해서는 TestLibDlg.cpp을(를) 참조하세요.
//
class CTestLibDlgApp : public CWinApp
{
public:
CTestLibDlgApp();
// 재정의입니다.
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
// 구현입니다.
DECLARE_MESSAGE_MAP()
};
extern CTestLibDlgApp theApp;

29
TestLibDlg/TestLibDlg/TestLibDlg.idl

@ -0,0 +1,29 @@
// TestLibDlg.idl: TestLibDlg.exe의 형식 라이브러리 소스
// 이 파일은 MIDL 컴파일러에 의해 처리되어
// 형식 라이브러리(TestLibDlg.tlb)입니다.
[ uuid(e6371bfe-4bde-4d88-b404-1d2f222f1ddf), version(1.0) ]
library TestLibDlg
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
// CTestLibDlgDoc의 기본 디스패치 인터페이스
[ uuid(3d30aa0d-19ce-4ca6-92b1-70a7403d578c) ]
dispinterface ITestLibDlg
{
properties:
methods:
};
// CTestLibDlgDoc에 대한 클래스 정보
[ uuid(faa0893c-64ec-4ba5-b1f0-18ed8cb7f106) ]
coclass TestLibDlg
{
[default] dispinterface ITestLibDlg;
};
};

BIN
TestLibDlg/TestLibDlg/TestLibDlg.rc

Binary file not shown.

17
TestLibDlg/TestLibDlg/TestLibDlg.reg

@ -0,0 +1,17 @@
REGEDIT
; .REG 파일은 SETUP 프로그램에 사용될 수 있습니다.
; SETUP 프로그램을 사용할 수 없는 경우 아래 항목이
; CWinApp::RegisterShellFileTypes 및 COleObjectFactory::UpdateRegistryAll을
; 호출하여 InitInstance에 자동으로 등록됩니다.
HKEY_CLASSES_ROOT\TestLibDlg.Application = TestLibDlg Application
HKEY_CLASSES_ROOT\TestLibDlg.Application\CLSID = {faa0893c-64ec-4ba5-b1f0-18ed8cb7f106}
HKEY_CLASSES_ROOT\CLSID\{faa0893c-64ec-4ba5-b1f0-18ed8cb7f106} = TestLibDlg Application
HKEY_CLASSES_ROOT\CLSID\{faa0893c-64ec-4ba5-b1f0-18ed8cb7f106}\ProgId = TestLibDlg.Application
HKEY_CLASSES_ROOT\CLSID\{faa0893c-64ec-4ba5-b1f0-18ed8cb7f106}\LocalServer32 = TestLibDlg.EXE

240
TestLibDlg/TestLibDlg/TestLibDlg.vcxproj

@ -0,0 +1,240 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<ProjectGuid>{FC9D3553-56B2-4453-AB34-94CF67213CE2}</ProjectGuid>
<Keyword>MFCProj</Keyword>
<RootNamespace>TestLibDlg</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>C:\git_work\test_lib\a2lLib\a2lLib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>C:\git_work\test_lib\a2lLib\Debug\a2lLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<TypeLibraryName>$(IntDir)TestLibDlg.tlb</TypeLibraryName>
<HeaderFileName>TestLibDlg_h.h</HeaderFileName>
</Midl>
<ResourceCompile>
<Culture>0x0412</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>C:\git_work\test_lib\a2lLib\a2lLib\include;C:\boost\include\boost-1_87</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>C:\git_work\test_lib\a2lLib\Debug\a2lLib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\boost\x86_lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<TypeLibraryName>$(IntDir)TestLibDlg.tlb</TypeLibraryName>
<HeaderFileName>TestLibDlg_h.h</HeaderFileName>
</Midl>
<ResourceCompile>
<Culture>0x0412</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<RegisterOutput>true</RegisterOutput>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<TypeLibraryName>$(IntDir)TestLibDlg.tlb</TypeLibraryName>
<HeaderFileName>TestLibDlg_h.h</HeaderFileName>
</Midl>
<ResourceCompile>
<Culture>0x0412</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<RegisterOutput>true</RegisterOutput>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<TypeLibraryName>$(IntDir)TestLibDlg.tlb</TypeLibraryName>
<HeaderFileName>TestLibDlg_h.h</HeaderFileName>
</Midl>
<ResourceCompile>
<Culture>0x0412</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="DlgProxy.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="TestLibDlg.h" />
<ClInclude Include="TestLibDlgDlg.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="DlgProxy.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="TestLibDlg.cpp" />
<ClCompile Include="TestLibDlgDlg.cpp" />
</ItemGroup>
<ItemGroup>
<Midl Include="TestLibDlg.idl" />
</ItemGroup>
<ItemGroup>
<None Include="res\TestLibDlg.rc2" />
<None Include="TestLibDlg.reg" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="TestLibDlg.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="res\TestLibDlg.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

75
TestLibDlg/TestLibDlg/TestLibDlg.vcxproj.filters

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="소스 파일">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="헤더 파일">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="리소스 파일">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="TestLibDlg.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="TestLibDlgDlg.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="DlgProxy.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="framework.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="targetver.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="Resource.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="pch.h">
<Filter>헤더 파일</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="TestLibDlg.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="TestLibDlgDlg.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="DlgProxy.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Midl Include="TestLibDlg.idl">
<Filter>소스 파일</Filter>
</Midl>
</ItemGroup>
<ItemGroup>
<None Include="TestLibDlg.reg" />
<None Include="res\TestLibDlg.rc2">
<Filter>리소스 파일</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="TestLibDlg.rc">
<Filter>리소스 파일</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<Image Include="res\TestLibDlg.ico">
<Filter>리소스 파일</Filter>
</Image>
</ItemGroup>
</Project>

6
TestLibDlg/TestLibDlg/TestLibDlg.vcxproj.user

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<RESOURCE_FILE>TestLibDlg.rc</RESOURCE_FILE>
</PropertyGroup>
</Project>

519
TestLibDlg/TestLibDlg/TestLibDlgDlg.cpp

@ -0,0 +1,519 @@

// TestLibDlgDlg.cpp: 구현 파일
//
#include "pch.h"
#include "framework.h"
#include "TestLibDlg.h"
#include "TestLibDlgDlg.h"
#include "DlgProxy.h"
#include "afxdialogex.h"
#include <iostream>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//template<typename ... Args>
//std::wstring wstring_format(const std::wstring& format, Args ... args);
template<typename ... Args>
std::string string_format(const std::string& format, Args ... args)
{
size_t size = snprintf(nullptr, 0, format.c_str(), args ...) + 1; // Extra space for '\0'
if (size <= 0) {
throw std::runtime_error("Error during formatting.");
}
std::unique_ptr<char[]> buf(new char[size]);
snprintf(buf.get(), size, format.c_str(), args ...);
return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside }
}
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
// 구현입니다.
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CTestLibDlgDlg 대화 상자
IMPLEMENT_DYNAMIC(CTestLibDlgDlg, CDialogEx);
CTestLibDlgDlg::CTestLibDlgDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_TESTLIBDLG_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pAutoProxy = nullptr;
}
CTestLibDlgDlg::~CTestLibDlgDlg()
{
// 이 대화 상자에 대한 자동화 프록시가 있을 경우 이 대화 상자에 대한
// 후방 포인터를 null로 설정하여
// 대화 상자가 삭제되었음을 알 수 있게 합니다.
if (m_pAutoProxy != nullptr)
m_pAutoProxy->m_pDialog = nullptr;
}
void CTestLibDlgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTestLibDlgDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_CLOSE()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CTestLibDlgDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
// CTestLibDlgDlg 메시지 처리기
BOOL CTestLibDlgDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
void CTestLibDlgDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 애플리케이션의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CTestLibDlgDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
// 이 함수를 호출합니다.
HCURSOR CTestLibDlgDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
// 컨트롤러에서 해당 개체 중 하나를 계속 사용하고 있을 경우
// 사용자가 UI를 닫을 때 자동화 서버를 종료하면 안 됩니다. 이들
// 메시지 처리기는 프록시가 아직 사용 중인 경우 UI는 숨기지만,
// UI가 표시되지 않아도 대화 상자는
// 남겨 둡니다.
void CTestLibDlgDlg::OnClose()
{
if (CanExit())
CDialogEx::OnClose();
}
void CTestLibDlgDlg::OnOK()
{
if (CanExit())
CDialogEx::OnOK();
}
void CTestLibDlgDlg::OnCancel()
{
if (CanExit())
CDialogEx::OnCancel();
}
BOOL CTestLibDlgDlg::CanExit()
{
// 프록시 개체가 계속 남아 있으면 자동화 컨트롤러에서는
// 이 애플리케이션을 계속 사용합니다. 대화 상자는 남겨 두지만
// 해당 UI는 숨깁니다.
if (m_pAutoProxy != nullptr)
{
ShowWindow(SW_HIDE);
return FALSE;
}
return TRUE;
}
void CTestLibDlgDlg::OnBnClickedButton1()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
loadA2lFile("C:\\Users\\oilvirus\\Downloads\\example-a2l-file.a2l");
}
void CTestLibDlgDlg::loadA2lFile(std::string strFilePath)
{
std::string strLogData;
bool bIsFileExist = false;
try {
bIsFileExist = std::filesystem::exists(strFilePath);
}
catch (const std::exception& error) {
std::cout << "Failed to fetch the A2l test files. Error: "
<< error.what();
}
a2l::A2lFile file;
file.Filename(strFilePath.data());
const auto parse = file.ParseFile();
if (parse )
std::cout << file.LastError() << " : " << strFilePath.data();
std::cout << file.Name() << (parse ? " : OK" : " : FAIL") << std::endl;
AddLogString(strFilePath.data());
//if (file.A2lVersion().VersionNo == 1)
// ;
std::cout << file.A2lVersion().VersionNo << " : " << file.A2lVersion().VersionNo;
AddLogString(string_format("file.A2lVersion().VersionNo : %d", file.A2lVersion().VersionNo));
//if (file.A2lVersion().UpgradeNo == 71)
// ;
std::cout << file.A2lVersion().UpgradeNo << " : " << file.A2lVersion().UpgradeNo;
AddLogString(string_format("file.A2lVersion().UpgradeNo : %d", file.A2lVersion().UpgradeNo));
const auto& project = file.Project();
const auto& header = project.Header();
//EXPECT_FALSE(header.Comment.empty());
//EXPECT_FALSE(header.ProjectNo.empty());
//EXPECT_FALSE(header.VersionNo.empty());
std::cout << header.Comment << " : " << header.Comment;
AddLogString(string_format("header.Comment : %s", header.Comment.c_str()));
std::cout << header.ProjectNo << " : " << header.ProjectNo;
AddLogString(string_format("header.ProjectNo : %s", header.ProjectNo.c_str()));
std::cout << header.VersionNo << " : " << header.VersionNo;
AddLogString(string_format("header.VersionNo : %s", header.VersionNo.c_str()));
const auto& module_list = project.Modules();
//ASSERT_EQ(module_list.size(), 1);
std::cout << module_list.size() << " : " << module_list.size();
AddLogString(string_format("module_list.size() : %d", module_list.size()));
const auto& module = module_list.cbegin()->second;
//ASSERT_TRUE(module);
//EXPECT_STREQ(module->Name().c_str(), "Example");
//EXPECT_FALSE(module->A2ml().empty());
AddLogString(string_format("module->Name() : %s", module->Name().c_str()));
AddLogString(string_format("module->A2ml() : %s", module->A2ml().c_str()));
AddLogString("");
for (const auto& [protocol, if_data] : module->IfDatas()) {
a2l::IfDataBlock block(if_data);
//EXPECT_TRUE(block.IsOk()) << block.LastError();
std::cout << block.AsString() << std::endl;
AddLogString(string_format("IF_DATA : %s", block.Protocol().c_str()));
AddLogString(string_format("block.ItemList().size() : %d", block.ItemList().size()));
for (int i = 0; i < block.ItemList().size(); i++) {
AddLogString(string_format("%d block.ItemList() : %s", i, block.ItemList()[i].BlockName.c_str()));
AddLogString(string_format("block.ItemList()[i].ItemList.size() : %d", block.ItemList()[i].ItemList.size()));
for (int j = 0; j < block.ItemList()[i].ItemList.size(); j++) {
// check digit
bool bIsDigit = true;
if (j > 0)
TRACE("asdf");
for (int cnt = 0; cnt < block.ItemList()[i].ItemList[j].Value.size(); cnt++) {
//int value = std::isdigit(block.ItemList()[i].ItemList[j].Value.at(cnt));
//int alpha = std::isalpha(block.ItemList()[i].ItemList[j].Value.at(cnt));
//TRACE("[%c][%d][%d]\n", block.ItemList()[i].ItemList[j].Value.at(cnt), value, alpha);
if (std::isdigit(block.ItemList()[i].ItemList[j].Value.at(cnt)) == 0)
bIsDigit = false;
}
if (bIsDigit)
AddLogString(string_format("%d : Address 0x%X (%d) : ", j, atoi(block.ItemList()[i].ItemList[j].Value.c_str()), atoi(block.ItemList()[i].ItemList[j].Value.c_str())));
else
AddLogString(string_format("%d : %s", j, block.ItemList()[i].ItemList[j].Value.c_str()));
for (int k = 0; k < (block.ItemList()[i].ItemList[j].ItemList.size()); k++) {
}
}
AddLogString("");
}
//AddLogString(string_format("block.AsString() : %s", block.AsString().c_str()));
AddLogString("");
}
AddLogString("");
const auto& axis_list = module->AxisPtss();
//EXPECT_GT(axis_list.size(), 1);
std::cout << "\t\tAXIS PTS" << std::endl;
for (const auto& [pts_name, pts] : axis_list) {
std::cout << pts_name << std::endl;
}
std::cout << std::endl;
const auto& blob_list = module->Blobs();
//EXPECT_GT(blob_list.size(), 0);
std::cout << "\t\tBLOB" << std::endl;
for (const auto& [blob_name, blob] : blob_list) {
std::cout << blob_name << " " << blob->Address() << std::endl;
}
std::cout << std::endl;
const auto& characteristic_list = module->Characteristics();
//EXPECT_GT(characteristic_list.size(), 0);
std::cout << "\t\tCHARACTERISTIC" << std::endl;
for (const auto& [char_name, characteristic] : characteristic_list) {
std::cout << char_name << " " << characteristic->Description() << std::endl;
}
std::cout << std::endl;
const auto& compu_method_list = module->CompuMethods();
//EXPECT_GT(compu_method_list.size(), 0);
std::cout << "\t\tCOMPU METHOD" << std::endl;
for (const auto& [method_name, method] : compu_method_list) {
std::cout << method_name << " " << method->Description() << std::endl;
}
std::cout << std::endl;
const auto& compu_tab_list = module->CompuTabs();
//EXPECT_GT(compu_tab_list.size(), 0);
std::cout << "\t\tCOMPU TAB" << std::endl;
for (const auto& [tab_name, tab] : compu_tab_list) {
std::cout << tab_name << " " << tab->Description() << std::endl;
}
std::cout << std::endl;
const auto& compu_vtab_list = module->CompuVtabs();
//EXPECT_GT(compu_vtab_list.size(), 0);
std::cout << "\t\tCOMPU VTAB" << std::endl;
for (const auto& [vtab_name, vtab] : compu_vtab_list) {
std::cout << vtab_name << " " << vtab->Description() << std::endl;
}
std::cout << std::endl;
const auto& compu_vtab_range_list = module->CompuVtabRanges();
//EXPECT_GT(compu_vtab_range_list.size(), 0);
std::cout << "\t\tCOMPU VTAB RANGE" << std::endl;
for (const auto& [range_name, range] : compu_vtab_range_list) {
std::cout << range_name << " " << range->Description() << std::endl;
}
std::cout << std::endl;
const auto& frame_list = module->Frames();
// EXPECT_GT(frame_list.size(), 0); No frames in file
std::cout << "\t\tFRAME" << std::endl;
for (const auto& [frame_name, frame] : frame_list) {
std::cout << frame_name << " " << frame->Description() << std::endl;
}
std::cout << std::endl;
const auto& func_list = module->Functions();
//EXPECT_GT(func_list.size(), 0);
std::cout << "\t\tFUNCTION" << std::endl;
for (const auto& [func_name, func] : func_list) {
std::cout << func_name << " " << func->Description() << std::endl;
}
std::cout << std::endl;
const auto& group_list = module->Groups();
//EXPECT_GT(group_list.size(), 0);
std::cout << "\t\tGROUP" << std::endl;
for (const auto& [group_name, group] : group_list) {
std::cout << group_name << " " << group->Description() << std::endl;
}
std::cout << std::endl;
const auto& instance_list = module->Instances();
//EXPECT_GT(instance_list.size(), 0);
std::cout << "\t\tINSTANCE" << std::endl;
for (const auto& [instance_name, instance] : instance_list) {
std::cout << instance_name << " " << instance->Description() << std::endl;
}
std::cout << std::endl;
const auto& meas_list = module->Measurements();
//EXPECT_GT(meas_list.size(), 0);
std::cout << "\t\tMEASUREMENT" << std::endl;
for (const auto& [meas_name, meas] : meas_list) {
std::cout << meas_name << " " << meas->Description() << std::endl;
}
std::cout << std::endl;
const auto& rec_list = module->RecordLayouts();
//EXPECT_GT(rec_list.size(), 0);
std::cout << "\t\tRECORD LAYOUT" << std::endl;
for (const auto& [rec_name, rec] : rec_list) {
std::cout << rec_name << std::endl;
}
std::cout << std::endl;
const auto& trans_list = module->Transformers();
//EXPECT_GT(trans_list.size(), 0);
std::cout << "\t\tTRANSFORMER" << std::endl;
for (const auto& [trans_name, trans] : trans_list) {
std::cout << trans_name << std::endl;
}
std::cout << std::endl;
const auto& taxis_list = module->TypedefAxiss();
//EXPECT_GT(taxis_list.size(), 0);
std::cout << "\t\tTYPEDEF AXIS" << std::endl;
for (const auto& [taxis_name, taxis] : taxis_list) {
std::cout << taxis_name << std::endl;
}
std::cout << std::endl;
const auto& tblob_list = module->TypedefBlobs();
//EXPECT_GT(tblob_list.size(), 0);
std::cout << "\t\tTYPEDEF BLOB" << std::endl;
for (const auto& [tblob_name, tblob] : tblob_list) {
std::cout << tblob_name << std::endl;
}
std::cout << std::endl;
const auto& tchar_list = module->TypedefCharacteristics();
//EXPECT_GT(tchar_list.size(), 0);
std::cout << "\t\tTYPEDEF CHARACTERISTIC" << std::endl;
for (const auto& [tchar_name, tchar] : tchar_list) {
std::cout << tchar_name << std::endl;
}
std::cout << std::endl;
const auto& tmeas_list = module->TypedefMeasurements();
//EXPECT_GT(tmeas_list.size(), 0);
std::cout << "\t\tTYPEDEF MEASUREMENT" << std::endl;
for (const auto& [tmeas_name, tmeas] : tmeas_list) {
std::cout << tmeas_name << std::endl;
}
std::cout << std::endl;
const auto& tstruct_list = module->TypedefStructures();
//EXPECT_GT(tstruct_list.size(), 0);
std::cout << "\t\tTYPEDEF STRUCTURE" << std::endl;
for (const auto& [tstruct_name, tstruct] : tstruct_list) {
std::cout << tstruct_name << std::endl;
}
std::cout << std::endl;
std::cout << std::endl;
const auto& unit_list = module->Units();
//EXPECT_GT(unit_list.size(), 0);
std::cout << "\t\tUNIT" << std::endl;
for (const auto& [unit_name, unit] : unit_list) {
std::cout << unit_name << std::endl;
}
std::cout << std::endl;
a2l::A2mlBlock a2ml_block(module->A2ml());
const auto& a2ml = module->A2ml();
const auto a2ml_parse = a2ml_block.IsOk();
//EXPECT_TRUE(a2ml_parse) << a2ml_block.LastError();
/*
const auto& block_list = a2ml_scanner.BlockList();
for (const auto& block : block_list) {
std::cout << block.AsString() << std::endl;
}
*/
}
void CTestLibDlgDlg::AddLogString(std::string strMessage)
{
CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST_DATA);
std::wstring message_w;
message_w.assign(strMessage.begin(), strMessage.end());
pListBox->AddString(message_w.c_str());
}

64
TestLibDlg/TestLibDlg/TestLibDlgDlg.h

@ -0,0 +1,64 @@

// TestLibDlgDlg.h: 헤더 파일
//
#pragma once
#include <chrono>
#include <filesystem>
#include <map>
#include <string>
#include "a2l/a2lfile.h"
#include "a2l/a2mlblock.h"
#include "a2l/ifdatablock.h"
using namespace std::filesystem;
using namespace std::chrono_literals;
class CTestLibDlgDlgAutoProxy;
// CTestLibDlgDlg 대화 상자
class CTestLibDlgDlg : public CDialogEx
{
DECLARE_DYNAMIC(CTestLibDlgDlg);
friend class CTestLibDlgDlgAutoProxy;
// 생성입니다.
public:
CTestLibDlgDlg(CWnd* pParent = nullptr); // 표준 생성자입니다.
virtual ~CTestLibDlgDlg();
// 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_TESTLIBDLG_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
// 구현입니다.
protected:
CTestLibDlgDlgAutoProxy* m_pAutoProxy;
HICON m_hIcon;
BOOL CanExit();
// 생성된 메시지 맵 함수
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnClose();
virtual void OnOK();
virtual void OnCancel();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
private:
void loadA2lFile(std::string strFilePath);
void AddLogString(std::string strMessage);
};

226
TestLibDlg/TestLibDlg/TestLibDlg_h.h

@ -0,0 +1,226 @@
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
/* File created by MIDL compiler version 8.01.0628 */
/* at Tue Jan 19 12:14:07 2038
*/
/* Compiler settings for TestLibDlg.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0628
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 500
#endif
#include "rpc.h"
#include "rpcndr.h"
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif /* __RPCNDR_H_VERSION__ */
#ifndef __TestLibDlg_h_h__
#define __TestLibDlg_h_h__
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#ifndef DECLSPEC_XFGVIRT
#if defined(_CONTROL_FLOW_GUARD_XFG)
#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func))
#else
#define DECLSPEC_XFGVIRT(base, func)
#endif
#endif
/* Forward Declarations */
#ifndef __ITestLibDlg_FWD_DEFINED__
#define __ITestLibDlg_FWD_DEFINED__
typedef interface ITestLibDlg ITestLibDlg;
#endif /* __ITestLibDlg_FWD_DEFINED__ */
#ifndef __TestLibDlg_FWD_DEFINED__
#define __TestLibDlg_FWD_DEFINED__
#ifdef __cplusplus
typedef class TestLibDlg TestLibDlg;
#else
typedef struct TestLibDlg TestLibDlg;
#endif /* __cplusplus */
#endif /* __TestLibDlg_FWD_DEFINED__ */
#ifdef __cplusplus
extern "C"{
#endif
#ifndef __TestLibDlg_LIBRARY_DEFINED__
#define __TestLibDlg_LIBRARY_DEFINED__
/* library TestLibDlg */
/* [version][uuid] */
EXTERN_C const IID LIBID_TestLibDlg;
#ifndef __ITestLibDlg_DISPINTERFACE_DEFINED__
#define __ITestLibDlg_DISPINTERFACE_DEFINED__
/* dispinterface ITestLibDlg */
/* [uuid] */
EXTERN_C const IID DIID_ITestLibDlg;
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3d30aa0d-19ce-4ca6-92b1-70a7403d578c")
ITestLibDlg : public IDispatch
{
};
#else /* C style interface */
typedef struct ITestLibDlgVtbl
{
BEGIN_INTERFACE
DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ITestLibDlg * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void **ppvObject);
DECLSPEC_XFGVIRT(IUnknown, AddRef)
ULONG ( STDMETHODCALLTYPE *AddRef )(
ITestLibDlg * This);
DECLSPEC_XFGVIRT(IUnknown, Release)
ULONG ( STDMETHODCALLTYPE *Release )(
ITestLibDlg * This);
DECLSPEC_XFGVIRT(IDispatch, GetTypeInfoCount)
HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
ITestLibDlg * This,
/* [out] */ UINT *pctinfo);
DECLSPEC_XFGVIRT(IDispatch, GetTypeInfo)
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
ITestLibDlg * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo **ppTInfo);
DECLSPEC_XFGVIRT(IDispatch, GetIDsOfNames)
HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
ITestLibDlg * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [range][in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId);
DECLSPEC_XFGVIRT(IDispatch, Invoke)
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
ITestLibDlg * This,
/* [annotation][in] */
_In_ DISPID dispIdMember,
/* [annotation][in] */
_In_ REFIID riid,
/* [annotation][in] */
_In_ LCID lcid,
/* [annotation][in] */
_In_ WORD wFlags,
/* [annotation][out][in] */
_In_ DISPPARAMS *pDispParams,
/* [annotation][out] */
_Out_opt_ VARIANT *pVarResult,
/* [annotation][out] */
_Out_opt_ EXCEPINFO *pExcepInfo,
/* [annotation][out] */
_Out_opt_ UINT *puArgErr);
END_INTERFACE
} ITestLibDlgVtbl;
interface ITestLibDlg
{
CONST_VTBL struct ITestLibDlgVtbl *lpVtbl;
};
#ifdef COBJMACROS
#define ITestLibDlg_QueryInterface(This,riid,ppvObject) \
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
#define ITestLibDlg_AddRef(This) \
( (This)->lpVtbl -> AddRef(This) )
#define ITestLibDlg_Release(This) \
( (This)->lpVtbl -> Release(This) )
#define ITestLibDlg_GetTypeInfoCount(This,pctinfo) \
( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
#define ITestLibDlg_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
#define ITestLibDlg_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
#define ITestLibDlg_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
#endif /* COBJMACROS */
#endif /* C style interface */
#endif /* __ITestLibDlg_DISPINTERFACE_DEFINED__ */
EXTERN_C const CLSID CLSID_TestLibDlg;
#ifdef __cplusplus
class DECLSPEC_UUID("faa0893c-64ec-4ba5-b1f0-18ed8cb7f106")
TestLibDlg;
#endif
#endif /* __TestLibDlg_LIBRARY_DEFINED__ */
/* Additional Prototypes for ALL interfaces */
/* end of Additional Prototypes */
#ifdef __cplusplus
}
#endif
#endif

84
TestLibDlg/TestLibDlg/TestLibDlg_i.c

@ -0,0 +1,84 @@
/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
/* link this file in with the server and any clients */
/* File created by MIDL compiler version 8.01.0628 */
/* at Tue Jan 19 12:14:07 2038
*/
/* Compiler settings for TestLibDlg.idl:
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0628
protocol : dce , ms_ext, c_ext, robust
error checks: allocation ref bounds_check enum stub_data
VC __declspec() decoration level:
__declspec(uuid()), __declspec(selectany), __declspec(novtable)
DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING( ) */
#ifdef __cplusplus
extern "C"{
#endif
#include <rpc.h>
#include <rpcndr.h>
#ifdef _MIDL_USE_GUIDDEF_
#ifndef INITGUID
#define INITGUID
#include <guiddef.h>
#undef INITGUID
#else
#include <guiddef.h>
#endif
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
#else // !_MIDL_USE_GUIDDEF_
#ifndef __IID_DEFINED__
#define __IID_DEFINED__
typedef struct _IID
{
unsigned long x;
unsigned short s1;
unsigned short s2;
unsigned char c[8];
} IID;
#endif // __IID_DEFINED__
#ifndef CLSID_DEFINED
#define CLSID_DEFINED
typedef IID CLSID;
#endif // CLSID_DEFINED
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
#endif // !_MIDL_USE_GUIDDEF_
MIDL_DEFINE_GUID(IID, LIBID_TestLibDlg,0xe6371bfe,0x4bde,0x4d88,0xb4,0x04,0x1d,0x2f,0x22,0x2f,0x1d,0xdf);
MIDL_DEFINE_GUID(IID, DIID_ITestLibDlg,0x3d30aa0d,0x19ce,0x4ca6,0x92,0xb1,0x70,0xa7,0x40,0x3d,0x57,0x8c);
MIDL_DEFINE_GUID(CLSID, CLSID_TestLibDlg,0xfaa0893c,0x64ec,0x4ba5,0xb1,0xf0,0x18,0xed,0x8c,0xb7,0xf1,0x06);
#undef MIDL_DEFINE_GUID
#ifdef __cplusplus
}
#endif

60
TestLibDlg/TestLibDlg/framework.h

@ -0,0 +1,60 @@
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 일부 CString 생성자는 명시적으로 선언됩니다.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h> // MFC 확장입니다.
#include <afxdisp.h> // MFC 자동화 클래스입니다.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // MFC의 리본 및 컨트롤 막대 지원
// 이 매크로는 TRUE를 전달한다는 점을 제외하면 IMPLEMENT_OLECREATE와 동일합니다
// 전달하는 점만 제외하면 IMPLEMENT_OLECREATE와 같습니다.
// 자동화 컨트롤러에서 요청한 각 자동화 프록시 개체에 대해
// 이 응용 프로그램에 대한 별도의 인스턴스가 시작되도록 합니다.
#ifndef IMPLEMENT_OLECREATE2
#define IMPLEMENT_OLECREATE2(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid, \
RUNTIME_CLASS(class_name), TRUE, _T(external_name)); \
const AFX_DATADEF GUID class_name::guid = \
{ l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } };
#endif // IMPLEMENT_OLECREATE2
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

5
TestLibDlg/TestLibDlg/pch.cpp

@ -0,0 +1,5 @@
// pch.cpp: 미리 컴파일된 헤더에 해당하는 소스 파일
#include "pch.h"
// 미리 컴파일된 헤더를 사용하는 경우 컴파일이 성공하려면 이 소스 파일이 필요합니다.

13
TestLibDlg/TestLibDlg/pch.h

@ -0,0 +1,13 @@
// pch.h: 미리 컴파일된 헤더 파일입니다.
// 아래 나열된 파일은 한 번만 컴파일되었으며, 향후 빌드에 대한 빌드 성능을 향상합니다.
// 코드 컴파일 및 여러 코드 검색 기능을 포함하여 IntelliSense 성능에도 영향을 미칩니다.
// 그러나 여기에 나열된 파일은 빌드 간 업데이트되는 경우 모두 다시 컴파일됩니다.
// 여기에 자주 업데이트할 파일을 추가하지 마세요. 그러면 성능이 저하됩니다.
#ifndef PCH_H
#define PCH_H
// 여기에 미리 컴파일하려는 헤더 추가
#include "framework.h"
#endif //PCH_H

BIN
TestLibDlg/TestLibDlg/res/TestLibDlg.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
TestLibDlg/TestLibDlg/res/TestLibDlg.rc2

Binary file not shown.

23
TestLibDlg/TestLibDlg/resource.h

@ -0,0 +1,23 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++에서 생성한 포함 파일입니다.
// TestLibDlg.rc에서 사용되고 있습니다.
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDP_OLE_INIT_FAILED 100
#define IDS_ABOUTBOX 101
#define IDD_TESTLIBDLG_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_LIST_DATA 1001
#define IDC_BUTTON1 1002
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

8
TestLibDlg/TestLibDlg/targetver.h

@ -0,0 +1,8 @@
#pragma once
// SDKDDKVer.h를 포함하면 최고 수준의 가용성을 가진 Windows 플랫폼이 정의됩니다.
// 이전 Windows 플랫폼에 대해 애플리케이션을 빌드하려는 경우에는 SDKDDKVer.h를 포함하기 전에
// WinSDKVer.h를 포함하고 _WIN32_WINNT 매크로를 지원하려는 플랫폼으로 설정하십시오.
#include <SDKDDKVer.h>
Loading…
Cancel
Save