달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2009. 5. 27. 17:03

C#에서 Win32 API 사용하기 Programing/Windows Programing2009. 5. 27. 17:03


개요

Win32 API를 불러올 때, 함수의 명칭, 인자, 리턴 값을 가지고 불러오게 되어 있다. 하지만, C#에서 타입들이 모두 객체(Object)의 형식이며, 일반적인 C 의 데이터 형과 상이한 모양을 가진다. 이러한 문제들을 해결할 수 있는 것이 PInvoke 기능이다.

 

PInvoke( Platform Invocation Service)는 관리화 코드에서 비관리화 코드를 호출할 방법을 제공한다. 일반적인 용도는 Win32 API의 호출을 위해 사용한다.

 

namespace PinvokeExample

{

using System;

 

             using System.Runtime.InteropServices; // 반드시 입력해야 한다.

 

             public class Win32

             {

                           [DllImport(user32.dll)]

                           public static extern int FindWindow(string a, string b);

                          

             }

}

 

위 예제는 FindWindow라는 user32.dll C함수를 사용하는 모습을 보여주고 있다. 실제 FindWindow의 선언은 다음과 같다.

 

             HWND FindWindow(LPCSTR swClassName, LPCSTR swTitle);

 

HWND는 윈도우 핸들을 표현하는 32비트 정수 이므로, int형으로 치환되고 LPCSTR 형은 NULL로 끝나는 문자열을 표현한다. 이때 PInvoke string을 자동으로 LPCSTR로 치환해 주는 역할을 하게 된다.

이 문서에서는 이처럼 Win32 API 함수의 여러 유형들을 어떻게 C#에서 사용 할 것인지에 대하여 알아보자.




 

출처 : 데브피아

:
Posted by Lunaness
2009. 5. 6. 17:02

WorldMate Live 리뷰 Smart Phone Story/Windows Phone2009. 5. 6. 17:02

오늘 긴 연휴를 끝내고 출근 하였을 때

MS의 [Your Mobile World for May 2009] 메일에 WorldMate Live 서비스에 대한 정보가 들어와 있었다

뭔가 하고 궁금하던 차 다운로드 받아 설치를 해보니

 

여행을 자주 하는 사람들에게 필요한 기능들을 모아 모아 만들어 둔 제품 이었다

마치 Spb Traveler와 같은 어플리케이션 이었던 것이다

MS의 Live 서비스 일환으로 만들어진 WorldMate Live는 인터넷이 연결되어 있다면

실시간으로 정보를 얻어오는 어플리케이션으로 여행자에게 많은 도움을 주기 위한 목적으로 만들어져 있다

 

설치방법이 조금 까다로운데

wml_installer_microsoft.cab 파일을 PDA에 복사한 후 직접 설치를 하는 방식이다

그 다음 설치된 WorldMate Live Install을 실행하여 인터넷에서 직접 다운로드 받는 방식이기 때문에

무선네트워크를 사용해서 다운받기 보다

엑티브 싱크를 통하여 설치하는 것이 좋을 듯 하다

 



 

마치며...

WorldMate Live는 기존의 여행 정보의 관리에 실시간 온라인 업데이트를 추가한 새로운 기능이다

물론 기존에 비해 전문적인 기능(비행일정 및 비행기 상태 조회)이 추가 된 것이 장점이긴 하지만..

그것은 유료 정보이기에 쉽게 접근하기는 어려운 정보들이다

 

설치 시 인터넷을 이용한 다운로드를 통하여 설치되는 모바일 어플리케이션은 처음이었다

설치되는 것도 왜 이리 많은지...

이것을 만약 무선통신을 이용하여 설치하였다면 CDMA였을 경우 엄청난 비용이 나왔을 법 하다

 

로딩시간도 길고 중복된 것 과 같은 기능, 그리고 다른 상용 어플리케이션을 많이 밴치마킹해서

만들어진 느낌도 많이 있지만,

MS에서 지향하는 Live에 한 갈래로 모바일 기기에서 접근하기 쉬운 여행정보 제공과 E-mail로 주고 받을 수 있는

정보는 앞으로 발전 가능성이 높다고 생각된다

:
Posted by Lunaness

저는 PDA를 사용하면서 Outlook 일정관리를 자주 사용하고 있습니다

하지만 언제부턴가 컴퓨터를 포맷을 하게 되면

Outlook 일정과 연락처를 백업하지 않을 경우 일정과 연락처를 날려버리는 경우가 생깁니다

다행이 PDA에 남아있다면야 가능하겠지만

설상가상으로 PDA도 리셋이 되어 버린다면….

 

 

이러한 단점을 없애고자 웹에서 Sync를 제공하는 서비스가 많이 있습니다

그런데….

돈이 문제지요 –ㅅ-

 


:
Posted by Lunaness

Interner Explorer8이 출시되었다는 예기를 듣고 바로 설치해 보았습니다

설치 완료 후 가장 먼저 해 본 것이 VS2005에서 C++ 프로젝트 생성 , C++ 클래스 생성 등

웹 페이지 형식으로 동작되는 기능창이 실행되는가 하는 것 이었습니다.

 

image

 

역시나...

 

Internet Explorer7과 마찬가지로 버그가 존재하더군요

원인은 VS2005의 위자드 엔진에서 IE8의 IInternetSecurityManager interface의 보안정책에 위반되기 때문이랍니다

 

해결방법은 아래와 같습니다

Visual C++ 팀이 Visual C++를 사용하는 개발자 분들이 Internet Explorer 8 설치 후에 겪는 문제에 대해 블로그를 통해 우회 방법을 소개했습니다. 방법은 아래와 같습니다.

- regedit 실행

- “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Zones”에서 “1000” 키 생성

- DWORD 엔트리 생성 (Name=1207, Type=REG_DWORD, Data=0x000000)

Visual C++ 사용하는 개발자가 Internet Explorer 8을 설치하고 나서, Visual Studio에서 마법사를 통해 함수 추가, 변수 추가, Smart Device 프로젝트 생성, Smart Device 클래스 추가 등과 같은 것을 실행할 때 예기치 않은 메시지와 함께 제대로 동작하지 않는 문제가 있습니다. Internet Explorer의 custom security manager 처리에서 순조롭지 않은 일이 발생했다고 하는데, 좀 더 자세한 것은 지켜봐야겠습니다.

Visual C++ Team Blog: http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx

 

출처 : 한국 마이크로소프트 에반젤리스트의 IT 블로그

:
Posted by Lunaness

WinCE5에서 외부 COM DLL을 로드하기 위하여 초기화를 해주는

CoInitialize()라는 함수는 WinCE5에서 지원하지 않는다

 

MSDN을 살펴 본 결과

역시... 죽으란 법은 없나보다

 

This function is not supported. Instead, your application should call CoInitializeEx using the COINIT_MULTITHREADED constant in the second parameter, like this:


CoInitializeEx(x, COINIT_MULTITHREADED);


If your application uses calls to CoInitialize, you can use a #define directive to map CoInitialize to CoInitializeEx, like this:


#define CoInitialize(x)     CoInitializeEx(x, COINIT_MULTITHREADED)

 

역시 MSDN…

:
Posted by Lunaness