[정리] DLL 지연 로드 & 프로세스 개인 환경 변수 설정

3429 단어 환경 변수
DLL 지연 로드는 정적과 동적 로드 사이를 감안하여 코드에 로드를 표시할 필요가 없지만, 내부 팀은 동적 로드를 하는 방식이 시스템 도움말일 뿐이다.이렇게 하면 좋은 점은: 1.필요한 시간에 동적으로 로드하므로 부팅 시간을 단축할 수 있습니다.2.LoadLibrary 작성을 줄이고 GetProcAddress를 정적 라이브러리 함수처럼 직접 사용합니다.그러나 그의 부족함이나 결함은 다음과 같다.변수는 지연 로드 방식을 통해 내보내지 않습니다.2. Kernal32.DLL에서 로드 웨이브를 지연할 수 없습니다.3. DllMain에서 DLL을 불러오는 라이브러리 함수를 사용하지 마십시오.
VS2008 DLL 설정 지연 로드 1.Linker -> 입력 -> 반송 지연 DLL => 쓰기 DLL 이름 2.링크기-> 고급-> 로드 지연 DLL = > 마운트 해제 지원(/Delay:unload) -----------------------------------------------------------------------
//프로세스 개인 환경 변수 설정
void SetPrivatePathEnvironment()

{

    //       

    char* pszPathVal = new char[4096];

    memset(pszPathVal, NULL, 4096);

    DWORD dwRet = GetEnvironmentVariable("path", pszPathVal, 4096);



    char szpath[MAX_PATH] = {0};

    GetModuleFileName(NULL, szpath, MAX_PATH);

    (strrchr(szpath, '\\'))[0] = 0; 

    (strrchr(szpath, '\\'))[0] = 0; 



    //  DLL  

    std::string strNewPath(szpath);

    strNewPath += "\\DLL;";

    strNewPath += pszPathVal;



    //       

    if (! SetEnvironmentVariable("path", strNewPath.c_str())) 

        printf("SetEnvironmentVariable failed (%d)
", GetLastError()); //dwRet = GetEnvironmentVariable("path", pszPathVal, 4096); delete[] pszPathVal; pszPathVal = NULL; }

좋은 웹페이지 즐겨찾기