api_list-drvoss.zip

요즘 애플리케이션을 만들다 보면, 프로그래머는 당연히(?) 2000 sp4이상 환경을 생각합니다. 적어도 2000 sp4이상 이여야 원활한 API 환경이 갖추어 지는 데다가, VisualStudio2008도 쓸 수 있고, 편하기 때문입니다.

 

그런데 가끔, 애플리케이션상 98을 지원해야 될 때가 있습니다. 클라이언트 도메인에 98 컴퓨터를 아직 사용하고 있는다던지, POS같은 98이 설치된 하드웨어 단말기가 많은 고객이라던지 아니면 범용적인 압축 애플리케이션을 만든다던지 등등

 

98을 지원하려면 일반적으로 Visual Studio 2005이하 버전에 포함되어 있는 컴파일러에서 멀티바이트 바이너리 형태로 컴파일 되는게 좋습니다. 이런 부분들이 지켜 진다면 다음으로 살펴볼 부분은 98에서 사용할 수 없는 API가 쓰였는가 입니다.

 

 

프로그래머는 xp에서 작업하기 때문에 여러 사람이 공동 작업을 하다 보면 누가 어떤 API를 썼는지 신경을 못 쓰게 됩니다. 만일 클라이언트 컴퓨터에 2000이 포함되어 있는데, xp이상에서만 돌아가는 API를 사용하게 되면 문제가 생깁니다.

 

예를 들어

 

GetProcessId 같은 함수의 모양새는 아주 범용적으로 생겼지만, vista에서만 쓸 수 있는 API 입니다. 서비스팩이 설치되어 있지 않은 xp에서는 문제의 소지가 다분하게 됩니다.

 

 

그렇다고 코드를 까서 다 살펴 볼 수도 없을꺼고, 문제가 생기길 기다렸다가 98에서 소스의 한줄씩 트레이싱하면서 리턴값을 체크하는 형태의 디버깅을 해볼 수도 없는 노릇입니다.

 

 

command 명령어에서 findstr을 사용하면 간단하게 문자열을 체크해 볼 수 있습니다.

 

findstr /s /g:사전파일 *.cpp *.c *.h *.hpp

 

 

이걸 이용하면 현재 지원해야 하는 최소의 OS에서 지원하지 않는 API가 쓰였는지 필터링 해 줄 수 있겠죠.

 

결과는 아래처럼 나타납니다.

target소스

#include <windows.h>

#include <iostream>

#include <process>

 

void main()

{

    YieldProcessor();

    DWORD pid = GetProcessId(GetCurrentProcess());

    YieldProcessor();

    int pid2 = _getpid();

    YieldProcessor();

    std::cout << pid << std::endl << pid2 << std::endl;

    YieldProcessor();

 

    return;

}

 

 

 



 

 

 

Main.cpp에서는 비스타 이상에서만 지원하는 함수들이 쓰였기 때문에, 이 애플리케이션은 xp이하 머신에서는 비정상 동작할 확률이 있습니다.

 

보너스로 각각 2000, xp, vista 이상에서 사용되는 함수 목록을 첨부합니다. 함수 뿐 아니라, OS에 종속적인 함수 인자 플래그 값같은것도 별도 파일로 만들어 놓고 릴리즈 하기 전에 검사해보면 좋을것 같습니다.


'temp' 카테고리의 다른 글

jquery  (0) 2010.06.08
ASP.NET에서 C++또는 C로 만들어진 DLL을 로딩하는 방법  (0) 2010.06.08
블로그 이미지

란마12

,