所学6
来源:互联网 发布:淘宝网登录不上 编辑:程序博客网 时间:2024/06/05 03:02
1.http://blog.csdn.net/wenfh2020/article/details/7790350
DestroyWindow 窗口创建和销毁要在同一个线程里 !要不然崩溃!
2.base64 解码如果中文记得转码从utf8转成gbk32 要不是乱码
3.与和或的应用 与可以按位赋值 或在if里a&b的值为0的话就为假,否则为真 或可以给位添1 与用来判断是否有1
int a;
int b;
if (123)
{
a = 8;
b = 3;
}
if (a & b)
{
int c = 10;
}
该值a & b为假
4.无法解析的外部符号 ---- 有声明 没有定义 然后直接用了声明的函数 就会报这个错
5.release会对不适用的变量进行优化,相当于没有用到
6.http://www.cnblogs.com/cswuyg/p/3207576.html
捕获更多的dmp
7.单例模式编译问题
私有静态成员变量在使用前必须初始化,否则link会报错 !
还有
static CWriteBack* const GetInstance()
{
static CWriteBack *pCWriteBack = new CWriteBack();
return pCWriteBack;
}
这么写没有问题
静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值静态局部变量在静态存储区分配存储单元,在程序的整个运行期间都不释放。静态局部变量是在编译时赋初值的,即只赋初值一次。意思就是 在程序的整个运行期间,静态局部变量只会赋一次初始值(只赋初值一次),不是说不能改!
8.InvaldateRect可以局部刷新 防止全部刷新进入到死循环
9.很多种,无法解析外部符号的错误,多数都是 在头文件中申明的函数方法,没有在cpp中实现,而导致的!!!
10.relsase 和debug互相发送消息可能有问题 debug send copydate消息到release会收不到
11.进程句柄找进程路径
void GetProcessFilePath(IN HANDLE hProcess, OUT CString& sFilePath)
{
sFilePath = _T("");
TCHAR tsFileDosPath[MAX_PATH + 1];
ZeroMemory(tsFileDosPath, sizeof(TCHAR)*(MAX_PATH + 1));
if (0 == GetProcessImageFileName(hProcess, tsFileDosPath, MAX_PATH + 1))
{
return;
}
// 获取Logic Drive String长度
UINT uiLen = GetLogicalDriveStrings(0, NULL);
if (0 == uiLen)
{
return;
}
PTSTR pLogicDriveString = new TCHAR[uiLen + 1];
ZeroMemory(pLogicDriveString, uiLen + 1);
uiLen = GetLogicalDriveStrings(uiLen, pLogicDriveString);
if (0 == uiLen)
{
delete[]pLogicDriveString;
return;
}
TCHAR szDrive[3] = TEXT(" :");
PTSTR pDosDriveName = new TCHAR[MAX_PATH];
PTSTR pLogicIndex = pLogicDriveString;
do
{
szDrive[0] = *pLogicIndex;
uiLen = QueryDosDevice(szDrive, pDosDriveName, MAX_PATH);
if (0 == uiLen)
{
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
break;
}
delete[]pDosDriveName;
pDosDriveName = new TCHAR[uiLen + 1];
uiLen = QueryDosDevice(szDrive, pDosDriveName, uiLen + 1);
if (0 == uiLen)
{
break;
}
}
uiLen = _tcslen(pDosDriveName);
if (0 == _tcsnicmp(tsFileDosPath, pDosDriveName, uiLen))
{
sFilePath.Format(_T("%s%s"), szDrive, tsFileDosPath + uiLen);
break;
}
while (*pLogicIndex++);
} while (*pLogicIndex);
delete[]pLogicDriveString;
delete[]pDosDriveName;
}
12.USES_CONVERSION 也可以用作 utf8和gbk之间的转换
USES_CONVERSION;
wstring wstrContent;
wstrContent = A2W_CP(strReceive.c_str(),CP_UTF8);
string strContent;
strContent = W2A_CP(wstrContent.c_str(),CP_ACP);
13.为了你程序员的人生着想. 请勿乱用方法....
较为标准的做法, 是采用接口. 全局数据均采用一个类来保存, 并且用接口的形式向外发布.
虽然读取全局变量的DLL, 只要DLL自己向外发布一个接口, 让外部调用这个接口设置全局变量接口进去就可以了.
这样不论日后怎样扩展, 也只是把接口加一起. 而不是说: 我的Param用掉了, 我又要加多一个全局变量喔..然后又去做些不规则动作, 这样写出来的一个程序. 谁也不会维护, 包括作者自己
14.全局变量的说明之前再加以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
15.这种方式的置顶是肯定能置顶的
//附加进程消息到置顶窗口上,设置焦点后取消附加
HWND hForeWnd = ::GetForegroundWindow();
DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);
DWORD dwCurID = GetCurrentThreadId();
AttachThreadInput(dwCurID, dwForeID, TRUE);
SetFocus();
AttachThreadInput(dwCurID, dwForeID, FALSE);
16.理解指向指针的指针 ,作用就是为了在函数中修改指向的值
void abc(char **p)
{
*p = "Yes!";
}
void def(char *p)
{
p = "Yes!";
}
void CMy12121Dlg::OnBnClickedOk()
{
char *pachTemp = "Hello World";
abc(&pachTemp);//可以修改pachTemp的值
def(pachTemp);//不用指向指针的指针的话,函数中的指针,
//abc 完事pachTemp 的值为Yes! def完事pachTemp的值还是 Hello World
}
DestroyWindow 窗口创建和销毁要在同一个线程里 !要不然崩溃!
2.base64 解码如果中文记得转码从utf8转成gbk32 要不是乱码
3.与和或的应用 与可以按位赋值 或在if里a&b的值为0的话就为假,否则为真 或可以给位添1 与用来判断是否有1
int a;
int b;
if (123)
{
a = 8;
b = 3;
}
if (a & b)
{
int c = 10;
}
该值a & b为假
4.无法解析的外部符号 ---- 有声明 没有定义 然后直接用了声明的函数 就会报这个错
5.release会对不适用的变量进行优化,相当于没有用到
6.http://www.cnblogs.com/cswuyg/p/3207576.html
捕获更多的dmp
7.单例模式编译问题
私有静态成员变量在使用前必须初始化,否则link会报错 !
还有
static CWriteBack* const GetInstance()
{
static CWriteBack *pCWriteBack = new CWriteBack();
return pCWriteBack;
}
这么写没有问题
静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值静态局部变量在静态存储区分配存储单元,在程序的整个运行期间都不释放。静态局部变量是在编译时赋初值的,即只赋初值一次。意思就是 在程序的整个运行期间,静态局部变量只会赋一次初始值(只赋初值一次),不是说不能改!
8.InvaldateRect可以局部刷新 防止全部刷新进入到死循环
9.很多种,无法解析外部符号的错误,多数都是 在头文件中申明的函数方法,没有在cpp中实现,而导致的!!!
10.relsase 和debug互相发送消息可能有问题 debug send copydate消息到release会收不到
11.进程句柄找进程路径
void GetProcessFilePath(IN HANDLE hProcess, OUT CString& sFilePath)
{
sFilePath = _T("");
TCHAR tsFileDosPath[MAX_PATH + 1];
ZeroMemory(tsFileDosPath, sizeof(TCHAR)*(MAX_PATH + 1));
if (0 == GetProcessImageFileName(hProcess, tsFileDosPath, MAX_PATH + 1))
{
return;
}
// 获取Logic Drive String长度
UINT uiLen = GetLogicalDriveStrings(0, NULL);
if (0 == uiLen)
{
return;
}
PTSTR pLogicDriveString = new TCHAR[uiLen + 1];
ZeroMemory(pLogicDriveString, uiLen + 1);
uiLen = GetLogicalDriveStrings(uiLen, pLogicDriveString);
if (0 == uiLen)
{
delete[]pLogicDriveString;
return;
}
TCHAR szDrive[3] = TEXT(" :");
PTSTR pDosDriveName = new TCHAR[MAX_PATH];
PTSTR pLogicIndex = pLogicDriveString;
do
{
szDrive[0] = *pLogicIndex;
uiLen = QueryDosDevice(szDrive, pDosDriveName, MAX_PATH);
if (0 == uiLen)
{
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
break;
}
delete[]pDosDriveName;
pDosDriveName = new TCHAR[uiLen + 1];
uiLen = QueryDosDevice(szDrive, pDosDriveName, uiLen + 1);
if (0 == uiLen)
{
break;
}
}
uiLen = _tcslen(pDosDriveName);
if (0 == _tcsnicmp(tsFileDosPath, pDosDriveName, uiLen))
{
sFilePath.Format(_T("%s%s"), szDrive, tsFileDosPath + uiLen);
break;
}
while (*pLogicIndex++);
} while (*pLogicIndex);
delete[]pLogicDriveString;
delete[]pDosDriveName;
}
12.USES_CONVERSION 也可以用作 utf8和gbk之间的转换
USES_CONVERSION;
wstring wstrContent;
wstrContent = A2W_CP(strReceive.c_str(),CP_UTF8);
string strContent;
strContent = W2A_CP(wstrContent.c_str(),CP_ACP);
13.为了你程序员的人生着想. 请勿乱用方法....
较为标准的做法, 是采用接口. 全局数据均采用一个类来保存, 并且用接口的形式向外发布.
虽然读取全局变量的DLL, 只要DLL自己向外发布一个接口, 让外部调用这个接口设置全局变量接口进去就可以了.
这样不论日后怎样扩展, 也只是把接口加一起. 而不是说: 我的Param用掉了, 我又要加多一个全局变量喔..然后又去做些不规则动作, 这样写出来的一个程序. 谁也不会维护, 包括作者自己
14.全局变量的说明之前再加以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
15.这种方式的置顶是肯定能置顶的
//附加进程消息到置顶窗口上,设置焦点后取消附加
HWND hForeWnd = ::GetForegroundWindow();
DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);
DWORD dwCurID = GetCurrentThreadId();
AttachThreadInput(dwCurID, dwForeID, TRUE);
SetFocus();
AttachThreadInput(dwCurID, dwForeID, FALSE);
16.理解指向指针的指针 ,作用就是为了在函数中修改指向的值
void abc(char **p)
{
*p = "Yes!";
}
void def(char *p)
{
p = "Yes!";
}
void CMy12121Dlg::OnBnClickedOk()
{
char *pachTemp = "Hello World";
abc(&pachTemp);//可以修改pachTemp的值
def(pachTemp);//不用指向指针的指针的话,函数中的指针,
//abc 完事pachTemp 的值为Yes! def完事pachTemp的值还是 Hello World
}
0 0
- 所学6
- 8月6日所学
- 所学所学所学TSSSSSSSSSSSSSSSSS
- 7月6日所学内容
- 所学何事?
- 090928所学
- 今天所学!
- 今天所学
- 今日所学
- 最近所学
- 今日所学
- 所学知识
- 所学2
- 所学3
- 所学4
- 所学5
- 所学7
- 近期所学
- Android 关于Shape画ring和line的问题
- 第15周项目2-用哈希法组织关键字
- 使用ItemDecoration 为 RecyclerView设置可 推动的 悬浮导航栏效果
- 实施远程项目常见的问题及总结
- Java反射机制详解
- 所学6
- 多个activity怎么共享一个socket,实际应用中怎么保持socket的长连接?
- mongodb 用户权限设定
- Android Studio导入ApiDemos
- Android颜色表以及水波纹的相关实现
- RHEL 5.3使用163 CentOS yum源
- 文章标题
- 回调函数
- ios10 调用手机相机崩溃解决方法