只有基于对话框的APP使用LIB方式加载,没有显式的的LoadLibrary()进行加载
解决方案 »
- CStatusBarCtrl控件怎么用?
- 求助:vc6.0 采用ADO访问Oracle数据库,内存不断在增加?
- 高手请进,关于CString 转换va_list 参数的问题
- vs2005下怎么添加数据库控件
- 请问sFileData.SpanExcluding("\r\n")是何意思?
- DEBUG版正常,RELEASE版不正常,谁有过类似经历前来指教.
- 关于#define问题
- 用dao连接sqlserver2000中执行update和delete语句报错是怎么回事
- 定义的一个控件CProgramCtrl,怎么使他在这个对话框调用起来的时候就显示当前的日期?
- 关于OnCreateClient()中的CCreateContext*参数?
- vc+sql连接数据库的问题
- 多线程的问题
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;
}