Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6869] dll 메인함수 내부에서 함수 호출..
네모 [] 46325 읽음    2014-01-24 00:26
요것과

(간단하게 dll 프로세스에 로드될때 웹브라우저 켜지는 dll 파일)

#include "stdafx.h"
#include <windows.h>

#define DEF_CMD "c:\\Program Files\\Internet Explorer\\iexplore.exe"
#define DEF_ADDR "http://www.aegis-one.kr"

#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) BOOL start()
{
  char szCmd[MAX_PATH]= {0,};
  STARTUPINFO si= {0,};
  PROCESS_INFORMATION pi= {0,};
 
  si.cb = sizeof(STARTUPINFO);
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_SHOW;
 
  wsprintf(szCmd, "%s %s", DEF_CMD, DEF_ADDR);
  if( !CreateProcess(NULL, (LPTSTR)(LPCTSTR)szCmd,
   NULL, NULL, FALSE,
   NORMAL_PRIORITY_CLASS,
   NULL, NULL, &si, &pi) )
   return FALSE;
 
  if( pi.hProcess != NULL )
   CloseHandle(pi.hProcess);
 
  return TRUE;
}
#ifdef __cplusplus
}
#endif

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH :
  start();               <------------------------- 이것과
  break;
}

return TRUE;
}



--------------------------------------


이녀석
(프로세스에 로드가되면 이미지 파일을 다운로드하는 dll)

#include "stdafx.h"
#include "H_dll.h"
#include <urlmon.h>

#pragma comment(lib, "urlmon.lib")

DWORD WINAPI ThreadFunc(LPVOID lpParameter){
URLDownloadToFile(0, "http://static.naver.com/www/u/2010/0611/nmms_215646753.gif", "C:\\a.gif", 0, NULL);
return 0;
}

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved)
{
HANDLE hThread = NULL;
    switch (ul_reason_for_call)

  case DLL_PROCESS_ATTACH:
   hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);   <---  이곳의 차이점은??
   CloseHandle(hThread);
   break;
         }
    return TRUE;
}




둘다 기본적으로 DLL 파일이며 메모리에 로드(process attach) 되었을시에 함수를 호출하는데요.
맨위에 있는 코드의 경우에는 그냥 start();  이렇게 곧바로 dll 메인에서 호출하고
아래에 있는 경우에는 createThread 함수로 새로운 쓰레드를 생성해서 ThreadFunc 함수를 호출하는데
그냥 ThreadFunc(); 이렇게 dll 메인에서 곧바로 호출하면 안되나요??

어떤분한테 물어보니 그냥 호출하면 메모리의 구조가 꺠진다고 말씀하시더군요.
꼭 CreateThread 함수를 이용하라고요.

대체 왜 그런걸까요?

+ -

관련 글 리스트
6869 dll 메인함수 내부에서 함수 호출.. 네모 46325 2014/01/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.