博文
关于SQL,82u(2007-11-02 10:18:00)
摘要:sql="insert into CDC_Manage(opCode,feature1) values ('123102',"+oft+")";//,""++
关于count字段不正确
也有可能是主键重复......
vc 编译器的工作过程(2007-10-31 14:37:00)
摘要:正常情况下,在编译阶段,编译器从C原始码文件产生一个.OBJ(目标)文件。在连结阶段,连结程序结合.OBJ文件和.LIB(库)文件以建立.EXE(可执行)文件。通过在「 Project」页面标签上选择「Settings」并单击「 Link」页面标签可以查看这些库文件的列表。特别地,您会注意到KERNEL32.LIB、USER32.LIB和GDI32.LIB。这些是三个主要Windows子系统的「引用链接库」。它们包含了动态链接库的名称以及放进.EXE文件的引用信息。Windows使用该信息处理程序对KERNEL32.DLL、USER32.DLL、GDI32.DLL动态链接库中函数的呼叫。......
转HMODULE GetModuleHandle( PCTSTR pszModu(2007-10-31 13:13:00)
摘要:当调用该函数时,你传递一个以0 结尾的字符串,用于设定加载到调用进程的地址空间的可执行文件或D L L 文件的名字。如果系统找到了指定的可 执行文件或D L L 文件名,G e t M o d u l e H a n d l e 便返回该可执行文件或D L L 文件映象加载到的基地址。如果系统没有找到该文件,则 返回N U L L 。也可以调用G e t M o d u l e H a n d l e ,为p s z M o d u l e 参数传递N U L L ,G e t M o d u l e H a n d l e 返回调 用的可执行文件的基地址。这正是C 运行期启动代码调用( w ) Wi n M a i n函数时该代码执行的操作。
请记住G e t M o d u l e H a n d l e 函数的两个重要特性。首先,它只查看调用进程的地址空间。如果调用进程不使用常用的对话框函数,那么 调用G e t M o d u l e H a n d l e 并为它传递“C o m D l g 3 2 ”后,就会返回N U L L ,尽管C o m D l g 3 2 . d l l 可能加载到了其他 进程的地址空间。第二,调用G e t M o d u l e H a n d l e 并传递N U L L 值,就会返回进程的地址空间中可执行文件的基地址。因此,即使通 过包含在D L L 中的代码来调用(N U L L ),返回的值也是可执行文件的基地址,而不是D L L 文件的基地址。
......
转 VC其它-善用GetLastError函数 (2007-10-30 16:51:00)
摘要:在编程过程中,当程序出现错误,却又不知道错误的原因时,可以使用GetLastError函数,它可以帮助你快速找到出错的原因和语句。
可以直接使用GetLastError函数得到错误代码,然后查找MSDN找到代码对应的错误原因,也可使用下面函数直接把错误原因显示出来:
void ShowErrMsg()
...{
TCHAR szBuf[80];
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
&nb......
转VC中char *name 与 char name[]的区别(基础知识)(2007-10-29 10:57:00)
摘要:VC中char *name 与 char name[]的区别(基础知识)
2007-06-09 15:36
在学习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。
程序演示:
测试环境Devc++
代码
#include <stdio.h>
#include <string.h>
main()
...{
char *c1 = "abc";
char c2[] = "abc";
char *c3 = ( char* )malloc(3);
c3 = "abc";
printf("%d %d %s ",&c1,c1,c1);
printf("%d %d %s ",&c2,c2,c2);
printf("%d %d %s ",&c3,c3,c3);
getchar();
}
运行结果
2293628 4199056 abc
2293624 2293624 abc
2293620 4199056 abc
参考资料:
首先要搞清楚编译程序占用的内存的分区形式:
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,......
2020(2007-10-28 22:48:00)
摘要: 手机铃声响,破晓。
这房间有两扇窗,都给窗帘遮上了。十多平方米,不小不大,刚好合适,前些日子合租的房客搬走了,原因是找到了更好的工作。
早上都是习惯喝一杯水,整理一下头发,昨天了解到早上洗头会对头部有害,所以决定先让自己清醒一下再用热水洗下,没办法,要工作。
调整了一下心情,上班去。
这就是主人公--阿斯,在新来工作的地方呆了几个月,但似乎并不熟悉这边的环境,每个月量入为出,名副其实的月光族成员。......
转dll学习笔记-隐式调用 (2007-10-26 16:43:00)
摘要:http://blog.sina.com.cn/s/blog_4aaf9c3d010006rn.html......
VC 16处理指纹(2007-10-25 13:54:00)
摘要: cByte[0]=0x1b;
cByte[1]=0x72;//114
cByte[2]=0x73;
cByte[3]=0x01;//注意长度为两个数
cByte[4]=0x21;//289//92//0121
cByte[5]=0x89;
cByte[6]=0x02;
all[0]+=cByte[3]+cByte[4]+cByte[5]+cByte[6];//加四个,因为长度0X01容易被忽略
////////////////第一个指纹不需要校验和
for(int i=0 ,j=7;j<150;i=i+2,j++)//i为字符串第几个截取的INDEX,j为第几个特征,最后一个是检验和
{//572
temp=s.Mid(i,2);
cByte[j]=CStringTo16byte(temp);
all[0]+=cByte[j];
}
////////////////
for(int i1=286, j1=150;j1<293;i1=i1+2,j1++)//i为字符串第几个截取的INDEX,j为第几个特征,最后一个是检验和
{
temp=s.Mid(i1,2);
cByte[j1]=CStringTo16byte(temp);
all[0]+=cByte[j1];
}
cByte[293]=all[0];
////////////////
DWORD&nb......
转VC中Radio控件的用法(2007-10-24 11:38:00)
摘要:
先为对话框加上2个radio button,分别是Radio1和Radio2。
问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?
关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,
第一种:
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上
((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();返回1表示选上,0表示没选上
第二种:
关联一个congtrol型变量(子类化),好ctrl+W(即打开classwizard),点开 Member Variables,咦?怎么没有IDC_RADIO1这个ID?原来是没有分组。因为radio button通常都是成组使用的,在一组里面是互斥的。取消,回到对话框资源面板,右键Radio1查看属性把Group选上,那么,Radio1和Radio2就是一组了(怎么知道他们是一组的?后面说)。此时,就可以为Radio1增加一congtrol型变量m_ctrlRadio1了。如下:
m_ctrlRadio1.SetCheck(TRUE);
同样可以使用GetCheck()获取状态。
第三种:
关联一个int型变量(同样需要先分组)m_nRadio1,打开对话框构造函数,你会发现有:
m_nRadio1 = -1;m_nRadio1别赋值-1表示哪个都没有选上。如果你把-1改成0,就会发现Radio1默认被选上了,依此类推,m_nRadio1的值为1就是第二个被选上了(这里同样有问题,哪个是第一个?哪个是第二个?)。获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值即可。
问题2:如何使用多组?
多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。再为对话框添加Radio3和Radio4。很简单,先为这些Radio Button排个顺序,就是排列他们的TAB ORDER。在对话框资源面板上Ctrl+D,然后按你......
转最常见的20种VC++编译错误信息集合(2007-10-23 13:34:00)
摘要:1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHello......