只有基于对话框的APP使用LIB方式加载,没有显式的的LoadLibrary()进行加载

解决方案 »

  1.   

    刚测试过,放在DLL里面也完全可以。这是EXE的结果:
    0x003A3190  43 3a 5c 00 44 3a 5c 00 45 3a 5c 00 46 3a 5c 00  C:\.D:\.E:\.F:\.
    0x003A31A0  47 3a 5c 00 4a 3a 5c 00 00 00 00 00 00 fd fd fd  G:\.J:\.........这是DLL的结果:
    0x003A3190  43 3a 5c 00 44 3a 5c 00 45 3a 5c 00 46 3a 5c 00  C:\.D:\.E:\.F:\.
    0x003A31A0  47 3a 5c 00 4a 3a 5c 00 00 00 00 00 00 fd fd fd  G:\.J:\.........EXE里面的实现代码:
    BOOL WINAPI dll_drv_IsLetterExisted(char driveLetter);BOOL drv_IsLetterExisted(char driveLetter) 

    char fullDriveLetter[4] = {0}; 
    char* szStr = NULL;  BOOL bResult = FALSE; 
    DWORD i = 0; 
    DWORD dwLength = 0;  if ((driveLetter < 'A') || (driveLetter > 'Z')) 

    return FALSE; 

    /* 构造驱动器名: 将驱动器字符转换成完整的驱动器路径 */ 
    sprintf(fullDriveLetter, "%c:\\", driveLetter);  /************************************************ 
    下面需要判断指定的驱动器是否在系统中存在 
    ************************************************/  //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。 
    dwLength = GetLogicalDriveStrings(0, NULL);  //用获取的长度在堆区创建一个c风格的字符串数组,字符长度中没有包括最后一个'\0',故需要加1. 
    szStr = (char *)malloc(dwLength + 4); 
    memset(szStr, 0, dwLength + 4); //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的字符名。 
    GetLogicalDriveStrings(dwLength, (LPTSTR)szStr);  for (i=0; i < dwLength/4; i++) 

    if (0 == memcmp(fullDriveLetter, &szStr[i*4], 3)) 

    bResult = TRUE; 
    break; 

    }  if (!bResult) 

    OutputDebugString("__FILIE__ __FUNCTION__: logic driver not exist"); 
    }  //释放动态申请的内存 
    free((void*)szStr); 
    szStr = NULL;  return bResult; 

    int _tmain(int argc, _TCHAR* argv[])
    {
    drv_IsLetterExisted('C'); dll_drv_IsLetterExisted('C');
    return 0;
    }DLL里面的实现代码:
    BOOL WINAPI dll_drv_IsLetterExisted(char driveLetter) 

    char fullDriveLetter[4] = {0}; 
    char* szStr = NULL;  BOOL bResult = FALSE; 
    DWORD i = 0; 
    DWORD dwLength = 0;  if ((driveLetter < 'A') || (driveLetter > 'Z')) 

    return FALSE; 

    /* 构造驱动器名: 将驱动器字符转换成完整的驱动器路径 */ 
    sprintf(fullDriveLetter, "%c:\\", driveLetter);  /************************************************ 
    下面需要判断指定的驱动器是否在系统中存在 
    ************************************************/  //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。 
    dwLength = GetLogicalDriveStrings(0, NULL);  //用获取的长度在堆区创建一个c风格的字符串数组,字符长度中没有包括最后一个'\0',故需要加1. 
    szStr = (char *)malloc(dwLength + 4); 
    memset(szStr, 0, dwLength + 4); //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的字符名。 
    GetLogicalDriveStrings(dwLength, (LPTSTR)szStr);  for (i=0; i < dwLength/4; i++) 

    if (0 == memcmp(fullDriveLetter, &szStr[i*4], 3)) 

    bResult = TRUE; 
    break; 

    }  if (!bResult) 

    OutputDebugString("__FILIE__ __FUNCTION__: logic driver not exist"); 
    }  //释放动态申请的内存 
    free((void*)szStr); 
    szStr = NULL;  return bResult;