오늘은 exe파일이나 dll, ocx 등의 파일 버젼을 읽을 필요가 있게 됩니다.


그때 읽는 함수를 알려드리겠습니다. 현재 제가 사용하고 있는 소스입니다.



* 소스코드


// CString parm_path : 파일경로

// CString parm_filename : 파일명.확장자

CString Util::GetAppVersion( CString parm_path, CString parm_filename )


        DWORD dwHandle, dwLen; 

        UINT BufLen; 

        LPTSTR lpData; 

        VS_FIXEDFILEINFO *pFileInfo; 

        CString pgm_path, ret_version;


pgm_path.Format("%s\\%s", parm_path, parm_filename);

        dwLen = GetFileVersionInfoSize( (char *)(const char *)pgm_path, &dwHandle ); 

        if (!dwLen)   return ""; 

         

        lpData = (LPTSTR) malloc (dwLen); 

        if (!lpData)   return ""; 

        if( !GetFileVersionInfo( (char *)(const char *)pgm_path, dwHandle, dwLen, lpData ) ) {   

                free (lpData); 

                return ""; 

        } 

         

        if( VerQueryValue( lpData, "\\\\", (LPVOID*) &pFileInfo, (PUINT)&BufLen ) )  {   

ret_version.Format("%d.%d.%d.%d", 

HIWORD(pFileInfo->dwFileVersionMS), LOWORD(pFileInfo->dwFileVersionMS), HIWORD(pFileInfo->dwFileVersionLS), LOWORD(pFileInfo->dwFileVersionLS)

);

                //*MajorVersion = HIWORD(pFileInfo->dwFileVersionMS); 

                //*MinorVersion = LOWORD(pFileInfo->dwFileVersionMS); 

                //*BuildNumber = HIWORD(pFileInfo->dwFileVersionLS); 

                //*RevisionNumber = LOWORD(pFileInfo->dwFileVersionLS); 

                free (lpData); 

                return ret_version; 

        } 

         

        free (lpData); 

m_debug_str.Format("[GetAppVersion] %s %s %s", parm_path, parm_filename, ret_version); AddLog(m_debug_str);


        return ret_version; 


* 사용법

CString ver = GetAppVersion("c:\\폴더", "aaa.exe")'


GetAppVersion 함수는 고정적으로 넣어놓고, 호출만 하면 해당 파일의 버젼이 읽히게 됩니다.

참 쉽죠~~













오늘은 개발할 때 디버깅을 위해 파일로 로그를 남기는 저의 방법을 알려드리려고 합니다.


일반적으로 함수 하나로 해서 로그를 많이 남기게 됩니다.



* 소스코드


// parm_log : 남길 로그

void Util::AddLog(CString parm_log)

{


CTime t = CTime::GetCurrentTime();

CString log_str;

log_str.Format("[%04d/%02d/%02d %02d:%02d:%02d] %s", t.GetYear(), t.GetMonth(), t.GetDay(), t.GetHour(), t.GetMinute(), t.GetSecond(), parm_log);

CString file_str, make_str;

file_str.Format("%s\\log\\%04d%02d%02d_log.txt", "c:\\로그폴더경로", t.GetYear(), t.GetMonth(), t.GetDay() );

FILE *fp = fopen((const char *)file_str, "a+t");

if(!fp) return;

fprintf(fp, "%s\n", (const char *)log_str);

fclose(fp);

}


* 사용법


AddLog("로그입니다.");



위 코드는 말그대로 지정된 c:\\로그폴더경로 란 경로에 로그를 남기게 됩니다.


로그를 남길 때 GetCurrentTime() 함수를 사용하여 현재 시스템시간을 얻어서 a+t 타입, 즉. 텍스트타입의 add 방식으로 파일에 추가하라는 의미있니다.


위 함수를 지정해 놓고 사용하시면 편리합니다.













오늘은 ASP에서 DB연결을 하는 방법에 대해 설명하려 합니다. 


너무나도 잘 알려진 내용이지만 저의 블로그에서 체계적으로 정리하는 의미에서 연재하고자 합니다.


* 소스코드


Dim dbcon


Function DBOpen

Set dbcon = Server.CreateObject("ADODB.Connection")

dbcon.Provider = "Sqloledb"

dbcon.Open("Server=localhost;Database=DB명; UID=DB아이디; PWD=DB암호;")

end function


Function DBClose

dbcon.close

set dbcon=nothing

end function


보통 함수로 만들어놓고 많이 사용하게 됩니다. 

위 함수는 고정적이고, DB명, 아이디, 암호만 넣고 시작하시면 됩니다.

CreateObject 로 오브젝트 생성 후 연결하게 됩니다.


보통 MSSQL 이외 오라클이나 MySQL 의 경우 CreateObject 안의 문자열을 다르게 하기만 하면 해당 db을 사용할 수 있습니다.

아주 쉽죠~



* 사용법


DBOpen

set rs=server.createobject("adodb.recordset")

sql=""


~~~


set rs=nothing
DBClose


저는 위처럼 하게 됩니다. 레코드셋도 각각 만들게 되면 부하양이 많아질 수 있기 때문에 저는 통상 하나의 레코드셋울 사용합니다.

쿼리부분의 레코드셋사용 부분은

sql = "select top 10 * from 테이블명 with(nolock) where 조건절~~ "

rs.open sql,dbcon
do until rs.eof

aaa = rs("search_str") 
rs.movenext
loop
rs.close


위처럼 하게 되며~~, 다음 쿼리에서 레코드셋을 또 사용하기 위해 반드시 rs.close 을 해줘야 재사용이 가능합니다,~~

참 쉽죠~~






+ Recent posts