본문 바로가기

분류 전체보기

Visual C++로 MSXML 사용하기 #5 루트 엘리먼트 내부에 텍스트와 자식 엘리먼트를 넣어보겠습니다. 먼저 루트 엘리먼트인 "document"에 "Hello, Word!"라는 문장을 넣어보겠습니다. Hello, World! 이를 소스코드로 표현하면 /* ex09.cpp */ #include #include #include #import int main(int argc, char * argv[]) { ::setlocale(LC_ALL, ""); if (SUCCEEDED(::CoInitialize(NULL))) { { _bstr_t bstr1, bstr2, bstr3; _variant_t variant; IXMLDOMDocumentPtr xmlDocument; IXMLDOMProcessingInstructionPtr xmlProcessingIns.. 더보기
Visual C++로 MSXML 사용하기 #4 BSTR과 마찬가지로 VARIANT형도 자신이 싣게될 데이터형에 따라 알아서 처리하는 _variant_t 클래스를 제공합니다. V_VT와 V_자료형 매크로를 사용해 일일이 데이터형을 지정하지 않아도 된다는 뜻입니다. 3편에서 보였던 소스를 _variant_t 형으로 다시 작성해보겠습니다. /* ex08.cpp */ #include "stdafx.h" int main(int argc, char * argv[]) { ::setlocale(LC_ALL, ""); if (SUCCEEDED(::CoInitialize(NULL))) { { _bstr_t bstr1, bstr2, bstr3; _variant_t variant; IXMLDOMDocumentPtr xmlDocument; IXMLDOMProcessingI.. 더보기
Visual C++로 MSXML 사용하기 #3 BSTR 자료형의 근본은 wchar_t * 형입니다. 인텔리센스로 확인해 보면 typedef OLECHAR * BSTR; 이고 OLECHAR은 다시 typedef wchar_t OLECHAR; 이므로 겉모양으로는 Wide Char 문자열과 똑같다는 뜻입니다. 다만 저장되는 문자열의 구조가 통상적인 C-Style이 아닌 맨 처음에 문자열의 길이가 명시되는 BSTR이라는 차이가 있는 것이지요 BSTR을 사용하기 위해서 이전 포스팅에서는 SysAllocString, SysFreeString의 함수를 사용하여 C-Style의 문자열을 변환하였지만 문자열을 사용하는 매 순간마다 이런 함수들을 호출해 일일이 변환하는 것은 번거롭기 그지없습니다. 그래서 BSTR의 사용과 변환에 관련된 기능들을 묶어놓은 클래스가 _b.. 더보기
Visual C++로 MSXML 사용하기 #2 아래의 간단한 XML 코드를 MSXML을 통해 생성하고 파일로 저장해보겠습니다. 먼저 XML 문서를 다루기 위한 XMLDOMDocument 인스턴스를 생성합니다. COM 클래스는 이름 끝에 Ptr이라 붙는 자료형을 제공하는데 이는 일종의 스마트포인터(smart pointer)로서 자신이 선언된 스코프가 끝날 때 메모리를 자동으로 해제하도록 만들어진 것입니다. 아래와 같이 IXMLDOMDocumentPtr형의 변수를 선언하고 CreateInstance 메서드를 호출합니다. 매개변수로는 XMLDocument의 CLSID를 전달합니다. HRESULT를 반환하며 SUCCEEDED 매크로를 통해 성공 또는 실패를 판별할 수 있습니다. /* ex03.cpp */ #include #import int main(int.. 더보기
Visual C++로 MSXML 사용하기 #1 Visual C++에서 XML 파일을 읽거나 쓸 때 MSXML을 사용합니다. MSXML을 사용하기 위해서는 COM을 알아야 하는데요. COM(Component Object Model)은 서로 다른 언어로 작성된 프로그램을 가져다 사용하는 기술로 Windows 운영체제에서 쓰입니다. 요즘은 닷넷이라는 좋은 플랫폼이 있어서 COM이 지향하고자 하는 기능들을 간편하게 활용할 수 있지만, Visual C++로 COM을 사용하기 위해서는 약간 복잡한 과정을 거칩니다. 1 단계. COM을 사용하기 위해 windows.h를 include합니다. #include 2 단계. CoInitialize 함수를 호출해 지금부터 COM을 사용할 것임을 운영체제에 알립니다. 매개변수로 NULL이 전달되는데 차기 버전을 위해 마련해.. 더보기
MSIL로 입출력하기 및 박싱/언박싱 //test2.il .assembly extern mscorlib { } .assembly Test { } .module test.exe .method static public void main() il managed { .entrypoint .maxstack 16 /* 이 곳에 지역 변수를 선언합니다. */ .locals init([0] string temp, [1] int32 a, [2] int32 b, [3] int32 result) /* System.Console.Write("Input the 1st integer : "); */ ldstr "Input the 1st integer : " call void [mscorlib]System.Console::Write(string) /* temp = S.. 더보기
MSIL의 기본 자료형 MSIL의 기본 자료형은 C#과 동일하게 부호 있는 정수와 부호 없는 정수 및 부동소수점으로 구성되어있습니다. 각각 .NET 기본 자료형에 대응되어 있습니다. 자료형.NET 클래스 이름설명 voidSystem.Void반환할 데이터가 없는 메서드의 반환 형식 boolSystem.BooleanTrue 또는 False charSystem.Char16비트 유니코드 문자 int8System.SByte부호 있는 8비트 정수 int16System.Int16 부호 있는 16비트 정수 int32System.Int32부호 있는 32비트 정수 int64System.Int64부호 있는 64비트 정수 native int System.IntPtr시스템 기본 크기의 부호 있는 정수 unsigned int8 System.Byte부호.. 더보기
MSIL로 닷넷 프로그램 작성하기 C#, VB.NET, J#, F#, C++/CLI, Delphi.NET 등등의 닷넷 프레임워크에서 사용되기 위한 언어는 중간언어(MSIL: Microsoft Intermediate Language)로 번역이 됩니다. 이 바이너리를 실행하는 순간 해당 CPU에 맞는 명령어들로 한번 더 번역이 되는 것이죠. MSIL은 어셈블리어보다는 심플합니다. 명령어의 수도 몇 개 되지 않고 소스 코드도 C언어와 비슷한 형태를 띱니다. // 파일명: test.il /* 닷넷의 기본 클래스들이 정의된 mscorlib를 참조해 쓰겠다는 부분입니다. */ .assembly extern mscorlib { } /* 이 어셈블리(= exe파일 또는 dll파일)의 이름은 Test입니다. */ .assembly Test { /* 어셈.. 더보기
宋熙東(송희동) - mini suksuhu bira (나의 숙수후 강) - 宋熙東(송희동) - mini suksuhu bira (나의 숙수후 강) abka deri eyeme tucirengge, (압카 더리 어염 투치렁거) 하늘로부터 날아와 생겨난 da gašan i ferguwecuke bira. (다 가샨 이 페르구워추커 비라) 고향의 얼이 담긴 강 alin tala be hetu ala hoton de (아린 탈라 버 허투 알라 호톤 더) 산과 들을 가로질러 마을에 isinjiha suksuhu bira. (이신지하 숙수후 비라) 다다르는 숙수후 강 haji min i gucuse boo deri (하지 민이 구추서 부우더리) 가까운 나의 벗 그리고 고향으로부터 fakcafi goro bade torime yabuha. (팍차피 고로 바더 토리머 야부하) 멀리 떠나와.. 더보기
Visual Studio 2013에서 어셈블리어 코딩 후 실행하기 Visual Studio 2013은 MASM 어셈블러가 내장되어 있습니다. 별도의 어셈블러 등 추가 설치 없이 설정만으로 어셈블리어 프로그램을 작성할 수 있습니다. 1단계. [파일(F)]-[새로 만들기(N)]-[프로젝트(P)]를 클릭합니다. [새 프로젝트] 창에서 [Visual C++]-[Win32 프로젝트]를 선택합니다. 프로젝트 이름을 지정하고 [확인] 버튼 누릅니다. 2단계. 응용 프로그램 마법사 화면에서 응용 프로그램 종류를 [콘솔 응용 프로그램]에 두고 추가 옵션에서 [빈 프로젝트]를 선택한 후 [마침] 버튼을 누릅니다. 3단계. 이 프로젝트에서 MASM을 사용하기 위해서는 솔루션 탐색기에서 프로젝트를 선택 후 마우스 오른쪽 버튼을 누르고 [빌드 종속성(B)]-[사용자 지정 빌드(B)]를 클릭합.. 더보기
waveOut 함수 사용 예제 #2 이번에는 웨이브 출력에 따라 콜백함수를 선언해 호출되도록 하겠습니다. (첨부파일:) #pragma comment(lib, "winmm.lib") #include #include #include #include #include #include #include #pragma pack(push, 1) typedef struct { CHAR szChunkID[4]; // 항상 'R', 'I', 'F', 'F'라는 4개의 ASCII 문자가 옵니다. DWORD dwChunkSize; // 이 필드 바로 다음부터 파일의 맨 끝까지의 크기를 저장합니다. CHAR dwFormat[4]; // 이 필드 다음에 오는 형식의 종류를 지정합니다. 여기에서는 'W', 'A', 'V', 'E'의 4개의 ASCII 문자가 옵니다. .. 더보기
waveOut 함수 사용 예제 #1 waveOut 함수는 Windows API에서 사운드 파일을 직접 읽어서 사운드 드라이버에 전달하는 저수준 출력 함수입니다. 저수준 함수인만큼 mp3, flac 등의 압축된 형식을 직접 읽을수는 없고 PCM 방식으로 저장된 파일(일명 wav 파일)을 읽습니다. 이를 이해하기 위해서는 먼저 웨이브 파일의 구조를 이해해야 합니다. (자세한 내용은 http://crystalcube.co.kr/123참조.) 웨이브 파일의 구조를 C 스타일의 구조체로 표현하면 다음과 같이 3개의 구조체로 표현가능합니다. /* WAVE 파일을 구성하는 3개의 구조체 */ // 파일에서 PCM WAVE가 기록된 가장 첫 부분에 해당하는 내용입니다. // 보통은 파일의 가장 첫 부분에 이 구조체에 들어맞는 내용이 옵니다. #pragm.. 더보기
맥 OS용 만년달력 프로그램 맥 OS용 만년달력 프로그램입니다. 그레고리력 1년 1월 1일 월요일을 기준으로 윤년을 고려하여 달력을 출력합니다. 프로그램 첨부: 압축을 풀고 실행하면 아래와 같은 화면을 보실 수 있습니다. Prev Year는 1년 전 같은 달, Next Year는 1년 후 같은 달, Prev Month는 전달, Next Month는 다음달 달력을 보여줍니다. 가운데 큰 버튼을 누르거나 [Calendar] - [Jump to Year/Month]를 통해 직접 연도와 달을 입력할 수 있습니다. 기원전은 음수 연도를 입력하면 됩니다. 예를 들어 그레고리력 기준 기원전 10년 3월의 달력은 Year에 -10, Month에 March를 입력하고 [Apply] 버튼을 누르면 됩니다. 본 프로그램의 소스는 해피캠퍼스를 통해 유료.. 더보기
이벤트 처리시 멤버에 들어간 배열 접근에서 EXC_BAD_ACCESS 오류가 뜰 경우 다음과 같이 버튼 하나 있고 내부적으로 배열을 가지고 있는 창이 하나 있다고 가정합니다. 버튼을 클릭하면 button_Click 메서드가 실행됩니다. // TestDelegate.h #import @interface TestDelegate : NSObject { NSArray * array; NSWindow * window; NSButton * button; } @property (nonatimic, retain) NSArray * array; @property (assign) IBOutlet NSWindow * window; @property (nonatomic, retain) IBOutlet NSButton * button; - (IBAction) button_Click: (NSButton *) se.. 더보기
C++11에서 추가된 클래스 - thread 최신 버전의 C++11 라이브러리에서는 운영체제의 함수를 사용하지 않고도 자체적으로 멀티스레드를 구현할 수 있습니다. std::thread 클래스가 바로 그 기능을 수행합니다. 함수를 서로 다른 스레드에서 실행시키는 방법은 다음과 같습니다. 1. 스레드 객체를 생성한다. std::thread의 생성자는 매개변수가 없는 함수의 경우: thread(함수) 매개변수가 있는 함수의 경우: thread(함수, 매개변수 순서대로 나열...) 이렇게 스레드 객체를 생성하는 것만으로도 이미 함수가 실행됩니다. 별도의 start/stop 함수를 호출하지 않습니다. 왜인지는 모르겠으나 C#처럼 해당 스레드를 일시중지시켰다 재개하는 기능은 원래 없습니다. C++의 thread클래스는 해당 함수가 스스로 종료할 때 까지 스레.. 더보기
Java에서 SQLite 사용하기 Java에서 SQLite를 사용하는 방법은 아래와 같습니다. 1단계. 아래 사이트에서 SQLite파일을 읽는 최신버전의 JDBC(sqlite-jdbc-3.7.2.jar)를 다운받습니다. 여기에서 바로 받을 수 있습니다. 링크: https://bitbucket.org/xerial/sqlite-jdbc/downloads 2단계. 자바 소스를 아래와 같이 작성합니다. /* Program.java */ import java.sql.*; public class Program { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; try { /* SQLite J.. 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/9 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/8 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/8 더보기
Microsoft Visual C++ 2.0 Visual C++ 2.0부터는 32비트로 제작되어 있습니다. 때문에 Windows 3.1에서는 설치되지 않습니다. 더보기
Mcrosoft Windows 3.0 (한글 버전) 한글 Windows 3.0입니다. 리얼모드에서 작동되는 마지막 윈도우이고, 5장의 플로피디스크 이미지로 구성되어 있습니다. 더보기
Windows 2000에서 IIS로 PHP 사용하기 [2/2] Windows 2000 Server에서 ISAPI 방식으로 IIS에 PHP 설치하기 (Part 2) - by tapito 3 단계: IIS 설정하기 [시작]-[프로그램(P)]-[관리 도구]-[인터넷 서비스 관리자]를 클릭합니다. 설정하고자 하는 웹 사이트(또는 서버 전체)의 등록정보를 클릭합니다. 여기에서는 [기본 웹 사이트]-[등록 정보(R)]를 클릭합니다. [ISAPI 필터] 탭에서 php 실행을 위한 DLL을 등록합니다. [추가(D)...] 버튼을 누릅니다. C:\php-4.4.9\sapi 폴더의 php4isapi.dll을 선택합니다. 필터 이름은 마음대로 정해도 좋습니다. [홈 디렉터리] 탭으로 갑니다. 필터를 등록했으니 확장자가 php인 파일은 php4isapi.dll이 그 내용을 해석하도록 연.. 더보기
Windows 2000에서 IIS로 PHP 사용하기 [1/2] Windows 2000 Server에서 ISAPI 방식으로 IIS에 PHP 설치하기 (Part 1) - by tapito Windows 2000 Server에 내장된 IIS(Internet Information Service)를 사용하여 PHP를 구성하는 방법입니다. 여기서는 ISAPI를 이용한 설정을 기준으로 하겠습니다. 1 단계: PHP 다운받아 압축 풀기 ISAPI 방식을 지원하는 PHP는 4.x까지입니다. http://www.php.net에 접속하여 PHP 4.4.9를 다운받습니다. 화면 상단의 Download클릭 후 화면 우측 Old Archives를 클릭합니다. 또는 여기에서 직접 받을 수도 있습니다: Old Archives 페이지를 한참 내리다 보면 4.4.9가 보입니다. zip packag.. 더보기
宋熙東(송희동) - andasa i mujilen(안다사 이 무질런, 진심어린 친구) 宋熙東(송희동) - andasa i mujilen(안다사 이 무질런, 진심어린 친구) udu goro juguun be yabuha manggi (우두 고로 주구운 버 야부하 망기) 그렇게 먼 길을 걸어 suwembe arkan ucaraha (수웜버 아르칸 우차라하) 마침내 너를 만났다 mini mujilen de bisire tondo sain andasa (민이 무질런 버 비시러 톤도 사인 안다사) 나의 믿을만한 진심어린 친구여 udu mudan kurdun be yabuha manggi (우두 무단 쿠르둔 버 야부하 망기) 수 없이 다가서고 멀어짐을 반복하며 muse arkan falinduha (무서 아르칸 팔린두하) 우리는 마침내 친구가 되니 muse ere anda i guculen be h.. 더보기
Microsoft Visual C++ 1.52 1993년에 출시된 Visual C++ 1.52입니다. CD 이미지 1장으로 구성되어 있고 msvc152 폴더의 setup.exe를 실행하면 됩니다. 압축 암호: http://tapito.tistory.com/ 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/7 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/6 더보기
Betsy & Chris(벳시 & 크리스) - 白い色は 戀人の色(하얀색은 연인의 색) Betsy & Chris - 白い色は 戀人の色 벳시 & 크리스 - 하얀색은 연인의 색(1969년 발표) 후리가나를 사용하기 위해 루비(ruby) 태그가 사용되었습니다. FireFox 사용자는 HTML ruby 추가 기능을 설치해야 잘 보입니다. 花はなびらの白しろい色いろは 恋人こいびとの 色いろ (하나비라노 시로이 이로와 코이비토노 이로) 꽃잎의 하얀 색은 연인의 색 懐なつかしい白百合しらゆりは 恋人こいびとの色いろ (나츠카시이 시라유리와 코이비토노 이로) 그리운 백합은 연인의 색 故郷ふるさとのあの人ひとの、あの人ひとの 足元あしもとに咲さく 白百合しらゆりの (후루사또노 아노 히또노 아노 히또노 아시모토니 사쿠 시라유리노) 고향의 그 사람, 그 사람의 발 아래 피는 백합의 색 花はなびらの白しろい色いろは 恋人こいびとの.. 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/5 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/4 더보기