HttpOpenRequest 이용시 디버깅 창에
"0xC0000005: 0xcccccccc 위치를 읽는 동안 액세스 위반이 발생했습니다."
메세지가 출력되어 무시하다 해결방법을 찾았습니다.

LPCTSTR   szAcceptType = "*/*";
LPCTSTR   szAccept = __ACE_HTTP_ACCEPT;
LPCTSTR   szContentType= _T("Content-Type: application/x-www-form-urlencoded\r\n");    
DWORD     dwFlags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_FORMS_SUBMIT;
DWORD_PTR dwContext = NULL;

m_hReq =::HttpOpenRequest(m_hHttp, "POST",  szURI, HTTP_VERSION, NULL, &szAcceptType, dwFlags, dwContext);
if(!m_hReq){
    return FALSE;
}

오류 해결방법

MSDN 함수 설명
HINTERNET HttpOpenRequest(
 __in   HINTERNET hConnect,
 __in   LPCTSTR   lpszVerb,
 __in   LPCTSTR   lpszObjectName,
 __in   LPCTSTR   lpszVersion,
 __in   LPCTSTR   lpszReferer,
 __in   LPCTSTR*  lplpszAcceptTypes,
 __in   DWORD     dwFlags,
 __in   DWORD_PTR dwContext
);

lplpszAcceptTypes 값을 다음과 같이 수정하면 됩니다.

LPCTSTR   szAcceptType[]= {"*/*", NULL};
LPCTSTR   szAccept = __ACE_HTTP_ACCEPT;
LPCTSTR   szContentType = _T("Content-Type: application/x-www-form-urlencoded\r\n");    
DWORD     dwFlags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_FORMS_SUBMIT;
DWORD_PTR dwContext = NULL;

m_hReq =::HttpOpenRequest(m_hHttp, "POST",  szURI, HTTP_VERSION, NULL, szAcceptType, dwFlags, dwContext);
if(!m_hReq){
    return FALSE;
}

2014/03/04 22:31 2014/03/04 22:31
태그 :
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

Dialog를 DoModal로 활성화시 숨긴채로 시작하는 방법.

1. 메세지 멥에 WM_WINDOWPOSCHANGING 이벤트 등록

BEGIN_MESSAGE_MAP(CAceDialog, CDialog)
    ON_WM_WINDOWPOSCHANGING()
END_MESSAGE_MAP()

2. OnWindowPosChanging 함수 수정
void CAceDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos){
    if(m_bVisible != TRUE){
        lpwndpos->flags &= ~SWP_SHOWWINDOW;
    }
    CDialog::OnWindowPosChanging(lpwndpos);
}

이후 대화상자를 보이게 하려면 m_bVisible 값을 TRUE로 설정후
ShowWindow(SW_SHOW);
를 호출해주면됨.

2014/03/04 22:30 2014/03/04 22:30
태그 : ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

[MFC] 프로세스 파일 경로

소스코드

CHAR    sProcessName[MAX_PATH] = {0,};
DWORD   nSize    = sizeof(CHAR)*MAX_PATH;;
DWORD   nLen     = 0;
HANDLE  hProcess = GetCurrentProcess();

ZeroMemory(sProcessName, nSize);
if( QueryFullProcessImageName(hProcess, 0, sProcessName, &nSize) ){
    TRACE("QueryFullProcessImageName : %s\n", sProcessName);
}

ZeroMemory(sProcessName, nSize);
if( (nLen =GetModuleFileName(NULL, sProcessName, sizeof(sProcessName))) > 0 ){
    sProcessName[nLen] = 0;
    TRACE("GetModuleFileName         : %s\n", sProcessName);
}

ZeroMemory(sProcessName, nSize);
if( (nLen =GetModuleFileNameEx(hProcess, NULL, sProcessName, sizeof(sProcessName))) > 0 ){
    sProcessName[nLen] = 0;
    TRACE("GetModuleFileNameEx       : %s\n", sProcessName);
}

ZeroMemory(sProcessName, nSize);
if( (nLen =GetProcessImageFileName(hProcess, sProcessName, sizeof(sProcessName))) > 0 ){
    sProcessName[nLen] = 0;
    TRACE("GetProcessImageFileName   : %s\n", sProcessName);
}

실행결과

QueryFullProcessImageName : D:\My Project\ProcessInfo\Debug\ProcessInfo.exe
GetModuleFileName         : d:\My Project\ProcessInfo\Debug\ProcessInfo.exe
GetModuleFileNameEx       : d:\My Project\ProcessInfo\Debug\ProcessInfo.exe
GetProcessImageFileName   : \Device\HarddiskVolume1\My Project\ProcessInfo\Debug\ProcessInfo.exe
2013/09/24 17:54 2013/09/24 17:54
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

IE8설치후 VS2008 스크립트 오류 문제

Internet Explorer 8 설치후 Visual Studio 2008에서 함수, 변수 추가시 Script 오류가 발생.

임시 해결방법

  1. regedit 실행
  2. "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 
    Settings\Zones" 항목에 "1000"키 생성
  3. "1000"키 항목에 DWORD값 추가
    - 이름 : 1207
    - 값    : 0x000000

참고

2009/03/31 09:53 2009/03/31 09:53
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

<트랙백>

  1. IE 8.0으로 업그라운드를 하고난뒤, RedJini 님께서 메신저로 문의를 한건 해주셨다. vs2005, vs2008 위자드에서 팝업이 안뜬다는.. 회사에서 2003으로 개발하고 있으니 전혀 눈치채지 못할수밖에. 혼자 이래저래 뒤져본 결과 위자드 띄울때 스크립트를 쓴다는것. 스크립트 뒤져보면 그 안에는 ActiveX를 사용한다는것. 앞뒤 정황을 따져보니, IE 8.0으로 업데이트 하면서 ActiveX띄울때 다시 묻곤하는데 이 부분에서 문제가 생기지..

Visual SorceSafe 자동 백업 하기

Visual Source Safe로 소스파일을 관리하다
백업을 수동으로 하기 번거로워서 자동으로 할수 있는 방법을 찾아봤습니다.

1) psftp 다운받기 : http://www.chiark.greenend.org.uk/~sgt ··· oad.html
    sftp를 프롬포트 상에서 실행할수 있는 프로그램.

2) backup.bat 파일 만들기

@ECHO OFF 
FOR /F "tokens=1-3 delims=- " %%i IN ('date /t') DO SET DATE=%%i-%%j-%%k

SET SRC_SAFE_INI_PATH=D:\MyProject\VSS
SET DATA_PATH=D:\MyProject\VSS\data
SET BACKUP_PATH=D:\MyProject\backup
D:\MyProject\VSS\win32\ssarc -d- -i- -yAdmin,passwd -s%SRC_SAFE_INI_PATH%,%DATA_PATH% "%BACKUP_PATH%\%DATE%.ssa" $/

@ECHO cd /home/acepro/source/backup>  sftp.sh
@ECHO lcd %BACKUP_PATH%>> sftp.sh
@ECHO mput %DATE%.ssa>> sftp.sh
@ECHO quit>> sftp.sh

C:\psftp.exe myid@mydomain.com -pw passwd -b sftp.sh
rm sftp.sh

3) 스케줄러 등록
   시작 -> 제어판 -> 예약된작업 에서 backup.bat 파일을 추가해주면 됩니다.

2006/08/21 02:46 2006/08/21 02:46
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

레지스트리등록

DLL, OCX 레지스트리 등록 방법.

OCX(DLL)파일 내에 선언되어있는 DllRegisterServer와 DllUnregisterServer를 호출함으로써 프로그램을 레지스트리에 등록할수 있습니다.
Install Shield와 같은 설치프로그램을 이용하면 쉽게 레지스트리에 등록가능하나 이를 이용하지 않을때 간단하게 쓸수 있는 함수 입니다.

BOOL CRegSvr32::Install(LPCSTR sPath){
       HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);
       HINSTANCE hLib = LoadLibraryEx(sPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
       if (hLib < (HINSTANCE)HINSTANCE_ERROR) {
               INSTALL_FAIL();
       }
       (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");
       if (lpDllEntryPoint == NULL) {
               INSTALL_FAIL();
       }
       if (FAILED((*lpDllEntryPoint)())) {
               INSTALL_FAIL();
       }
       FreeLibrary(hLib);
       return TRUE;
}

BOOL CRegSvr32::UnInstall(LPCSTR sPath){
       HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);
       HINSTANCE hLib = LoadLibraryEx(sPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
       if (hLib < (HINSTANCE)HINSTANCE_ERROR) {
               INSTALL_FAIL();
       }
       (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllUnregisterServer");
       if (lpDllEntryPoint == NULL) {
               INSTALL_FAIL();
       }
       if (FAILED((*lpDllEntryPoint)())) {
               INSTALL_FAIL();
       }
       FreeLibrary(hLib);
       return TRUE;
}

2006/05/06 17:23 2006/05/06 17:23
태그 : ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다