华为畅玩5c和5x的区别和5有啥

该用户没有自我介绍
1.按[开始]菜单上的[运行],输入cmd,按[确定]  2.输入cd C:\program files\microsoft Office\office11\addins 完成后按[enter]键  3.输入regsvr32 /u SYMINPUT.DLL 完成后再按下[Enter]键  4.输入regsvr32 SYMINPUT.DLL 完成后再按下[Enter]键
从cmd进入android sdk下的tools目录键入adb shell然后cd /data/data/你的工程如com.test.TestActivity/databases到数据库目录下,你想删哪个就rm **
你是说打印出来有半透明效果吗? 可以用颜色比较浅的填充,再修改名为mnochoe(具体我记不全,反正是m开头的)打印样式,把你填充的那个颜色改为按显示。打印的时候选这个样式就可以了
打开VC后,文件-&新建,VC自动定位到“工程”选项卡,如果编写C程序,选择Win32 Console Application(32位控制台程序),再输入要保存的路径和文件名,点击确定,界面里默认“一个空工程”,点击“完成”,这里就创建了一个工程。这时还不能开始写程序,选择“工程”-&“增加到工程”-&“新建”,VC自动定位到“文件”选项卡,要写C语言程序,选择“C++ Source File”(兼容C的),输入文件名,点击确定即可。
try { string name = FileUpload1.FileN string size = FileUpload1.PostedFile.ContentLength.ToString(); string type = name.Substring(name.LastIndexOf(&.&) + 1).ToLower(); if (type == &jpg& || type == &png& || type == &bmp& || type == &gif& || type == &jpeg&) { try { ImgUploads iu = new ImgUploads(DropDownList1.SelectedItem.Text); String id=iu.GetMaxId();//获取数据库最大ID号用来命名图片 String ReName = id + &.& +//图片重命名 String Ipath = Server.MapPath(&~/hy/upimg&) + &\\& + ReN//文件实际路径 FileUpload1.SaveAs(Ipath);//上传到图片目录 String Tpath = Server.MapPath(&~/hy/thumbar&) + &\\& + ReN//缩略图路径 PictureSlightly.MakeImage(Ipath,Tpath,100,130,&hw&);//生成缩略图 //上传到数据库 iu.UpImg(Convert.ToInt32(id),DropDownList1.SelectedItem.Text,ReName.ToString()); Label1.Text = &上传成功,图片大小:& + size + &B&; this.thumbar.Src = &~/hy/thumbar/& + ReN } catch(Exception ex) { Page.RegisterStartupScript(&error&, &&script&alert('图片上传失败,请重试!&+ex.Message.ToString()+&');&/script&&); } } else { Page.RegisterStartupScript(&error&, &&script&alert('图片格式不对!');&/script&&); } } catch { Page.RegisterStartupScript(&error&, &&script&alert('图片上传失败,请重试!');&/script&&); } }
string seSql = &select * form & + listN SQL语句错误是from不是form
因为你的m变量是int类型的,所以m=& &+n这句话是有错误的。
本质区别是这样的,linux下用的是伯克利socket,windows底下用的WinSocket.两者其实是大同小异的,不同的地方在以下几点:1 头文件不同,在linux下用到的关键头文件&sys/socket.h&windows下用到的是 &Winsock2.h&2 socket的初始化不一样,在windows下要有一个WSAStartup,而linux 下没有。3 具体的细节不一样,linux下的c和windows下的c的一些语法有些出入,你自己找找。下面我把windows下的socket通讯的最基本的结构给你,你对照着修改就可以了,一下的程序我调试了一下,编译过了。客户端#include &Winsock2.h&#include &stdio.h&void main(){WORD wVersionRWSADATA wsaDwVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSaddrSrv.sin_addr.S_un.S_addr=inet_addr(&127.0.0.1&);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf(&%s\n&,recvBuf);send(sockClient,&This is lisi&,strlen(&This is lisi&)+1,0);closesocket(sockClient);WSACleanup();}服务器端#include &Winsock2.h&#include &stdio.h&void main(){WORD wVersionRWSADATA wsaDwVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );}SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSaddrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,5);SOCKADDR_IN addrCint len=sizeof(SOCKADDR);while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf[100];sprintf(sendBuf,&来自服务器端&,inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf[100];recv(sockConn,recvBuf,100,0);printf(&%s\n&,recvBuf);closesocket(sockConn);
方法一:CStatusBar*   pStatus=(CStatusBar*)  
AfxGetApp()-&m_pMainWnd-&GetDescendantWindow(AFX_IDW_STATUS_BAR);  
pStatus-&SetPaneText(0,&test   string&);   方法二:对状态栏使用ON_UPDATE_COMMAND_UI机制。
只要在想截获的区域增加Onkeydown事件函数,并在执行函数中写下如下语句:  if (window.event.keyCode==13) window.event.keyCode=0  这样就取消回车键了  如果想模拟Tab键,只要写成  if (window.event.keyCode==13) window.event.keyCode=9  就行了,它会跳到另一个元素上。
ActiveX是Microsoft提出的一组使用COM(ComponentObjectModel,部件对象模型)使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。本文着重介绍以Visual C++ 5.0为工具,利用系统提供的AppWizard快速构造一个简单的ActiveX控件。 通常VC++5.0提供两个途径开发ActiveX控制:MFC和ATL(ActiveXTemplateLibrary)。使用MFC,可以不必理会控制接口的细节,把注意力集中在控制本身的功能上,但是生成的控制比较大。而且,客户端如果要运行此ActiveX控制,必须拥有相应版本的MFC类库的DLL,否则,必须同时下载这些巨大的类库;使用ATL,由于不汲及MFC的标准类库,生成的控制相对较小,但开发者必须了解COM、OLE技术的细节。这里,我们主要说明一下使用MFC开发ActiveX控制的方法,因为这种方法相对比较容易。 在Microsoft Developer Studio环境下,按如下的操作步骤可以快速生成一个标准的ActiveX控件。首先,启动系统的AppWizard,用File菜单下的New菜单项创建新的项目。注意:我们选择的是列表框中的MFC ActiveX ControlWizard项。也可以使用ATL COM AppWizard项来产生ActiveX控件,这样实现的控件的最终代码量较小,但由于用这种方法加入的ActiveX控件对象从最基本的COM对象出发,故不能使用MFC类库中的COleControl所提供的强大功能。而用MFC ActiveX ControlWizard项则产生以COleControl为基类的控件对象类,它继承了所有COleControl类中实现的OLE控件的特性,包括窗口对象特性和方法、属性及事件等。接着,按照系统给出的提示信息逐步完成创建工作。用户可根据实际应用的要求定制控件的各项特性。 我们假定项目名为Test。创建工作完成后,打开Workspace文件Test.dsw,可以看到系统生成的Test控件框架,主要的类及实现功能描述见下表: 派生类 基类 实现功能 CTestApp COleControlModule 控件实例的初始化和撤消 CTestCtrl COleControl 控件窗口的创建、更新及消息处理 CTestPropPage COlePropertyPage 控件属性页的设置及与实际属性值的交换 编译此项目,生成Test.ocx。在当前的Developer Studio环境下,这个控件已经被自动注册了。用系统提供的工具ActiveX Control Test Container可以立即进行测试,在已提供的可插入OLE控件列表中,Test Control就是我们生成的控件名。如果想在其它环境下使用它,则必须先对Test.ocx文件进行注册,具体做法是在命令行方式下键入命令:“regsvr32 …\Test.ocx”。此后,我们就可在任何支持ActiveX控件的环境中使用它了。注意:.ocx文件应该随时更新和注册。 当然,这样生成的控件没有什么实质性的用处,若在任何一个包容器中测试它,则只可见一个矩形框和一个内切椭圆,除了缩放和位置移动功能外不能进行任何操作。 然而,我们希望开发出来的控件就像一个通常的编辑环境一样:用户可以在窗口内进行文本的输入和编辑,而且有工具条来支持各项操作。 1、为控件添加工具条和子窗口  VC++的模板常常是很有用的工具,我们设计一个类CToolbar,为控件类T添加工具条,显示每个按钮及提示信息。我们的控件类CtestCtrl是从这个类派生出来的,从而可为控件加上设计好了的工具条。 以下是实现工具条模板类的定义 (在Toolbar.h文件中) : templateclass CToolbar { public: CToolbar(); void CreateToolbar(HWND hParent);// 创建工具条 void AddButtons();// 逐个加入按钮 void DestroyToolbar();// 撤消工具条 LRESULT OnToolbarNeedText(WPARAM, LPNMHDR pnmh, BOOL&); // 工具条上按钮的提示信息 protected: HWND m_hwndT// 工具条的窗口句柄 }; 接着,要对TestCtl.h和TestCtl.cpp作相应的修改。在TestCtl.h中要先包含Toolbar.h文件,并将控件类定义为: class CTestCtrl : public COleControl, public CToolbar 然后,再加进消息映射宏: BEGIN_TOOLBAR_MAP(CTestCtrl) TOOLBAR_BUTTON(ID_New) TOOLBAR_SEPARATOR() TOOLBAR_BUTTON(ID_CUT) ...... TOOLBAR_SEPARATOR() ...... END_TOOLBAR_MAP() 以响应定制的工具条上的各个按钮消息。上面的宏在Toolbar.h文件中被定义。于是,在CTestCtrl类的成员函数中就可以灵活使用CToolbar类的各项操作了。 另外,我们再为控件设计一个可编辑的子窗口。这实现起来很方便,在控件类定义中直接加入CEdit类的对象作为成员变量m_TestEdit即可。 要想真正生成我们自己的控件窗口,则需重载COleControl::CreateControlWindow函数。控件窗口被创建时,该函数被调用,函数中先调用基类同名函数,再依次调用CreateToolbar和CreateTestEdit 生成控件中的工具条和子窗口。自然,我们不再需要系统缺省调用的画图函数,将CTestCtrl::OnDraw 中画矩形框和椭圆的部分去掉。CreateToolbar在工具条模板类中实现;CreateTestEdit 在控件类中自定义,函数先计算控件窗口的客户区和工具条的窗口大小,得到子窗口的位置,使之填满控件中工具条以外的全部区域,然后调用m_TestEdit.Create函数,设置参数使子窗口具有用户所希望的各项风格。 2、调整控件窗口中各个对象的位置  工具条和子窗口已经在控件中生成后,还有一项重要的工作就是当控件位置移动或大小改变时,要相应地调整工具条和子窗口的位置和大小。 COleControl类为我们提供了这样的函数: COleControl::OnSetObjectRects(LPCRECT lpRectPos, LPCRECT lpRectClip);  其中的参数给出了控件的新位置。重载此函数,先按系统提供的功能自动调整工具条,调用: ::SendMessage(m_hwndToolbar, TB_AUTOSIZE, 0L, 0L)  然后,同创建时一样计算控件窗口的客户区(参数lpRectPos已给出),调用GetWindowRect获得工具条的窗口大小。为使子窗口填满控件中工具条以外的全部区域,应先计算出相应的矩形位置并调用m_TestEdit.SetWindowPos来 实现子窗口的位置调整。为了美观起见,也可在子窗口的四边留出少许富余。最后,调用基类的OnSetObjectRects函数。 3、实现对控件内对象的控制  因为有了子窗口,实际上用户的各项功能操作都是由子窗口来控制完成的。我们将焦点的控制权交给子窗口,使用户能进行输入和编辑操作,在CTestCtrl::OnSetFocus中调用m_TestEdit.SetFocus。同样,当控件对象捕获到工具条上的按钮被按下的消息时,要调用 m_TestEdit 的相应函数以执行用户的命令。 工具条上提示信息的显示也由控件对象来控制。在CTestCtrl::OnNotify函数中加入如下代码: NMHDR *pNMHDR = (NMHDR *)lP BOOL if (pNMHDR-&code == TTN_NEEDTEXT) return OnToolbarNeedText(wParam, pNMHDR, tmp);  这样,当鼠标移动并停留在工具条的某个按钮上时,控件对象就会调用工具条模板类中的OnToolbarNeedText 函数以获得相应的提示信息。 4、控件窗口及内部对象的撤消 最后需要说明的是,如果我们在控件中创建了新的工具条和子窗口,则也应该及时撤消控件窗口及其内部对象。撤消控件窗口,即是在 CTestEdit::OnDestroy函数中依次调用DestroyToolbar和 m_TestEdit.DestroyWindow 来清除工具条和子窗口。 遵循以上四个工作步骤就可以很好地创建一个带有工具条和编辑子窗口的ActiveX控件。子窗口可由用户自己定义,象通常的应用程序那样去实现各种各样或简单或复杂的功能。工具条的存在使用户执行各项操作更加方便。此外,在控件中加进其它各种所需的对象并进行控制也是可能的。
标签应该放到 exit sub之后你的语句是有错误跳到ww处,没错误你告诉过程到什么地方,只是顺其自然往下走,还是到了ww,当然会执行ww:标签之前写一个exit sub
最好用gridview控件链接数据库
ds.Tables[0].Rows[0][&UpdateTime&].ToString() != && 你这是验证是否为“”就是说是不是没有指 如果ds里面没有UpdateTime这列 就会报这个错 你试试这样写 ds.Tables[0].Rows[0][&UpdateTime&]!=null
DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它。
在 Visual C++ 中使用内联汇编- - 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联汇编代码可以使用 C/C++ 变量和函数,因此它能非常容易地整合到 C/C++ 代码中。它能做一些对于单独使用 C/C++ 来说非常笨重或不可能完成的任务。 一、 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联汇编代码可以使用 C/C++ 变量和函数,因此它能非常容易地整合到 C/C++ 代码中。它能做一些对于单独使用 C/C++ 来说非常笨重或不可能完成的任务。 内联汇编的用途包括: 使用汇编语言编写特定的函数; 编写对速度要求非常较高的代码; 在设备驱动程序中直接访问硬件; 编写 naked 函数的初始化和结束代码。 二、 关键字 使用内联汇编要用到 __asm 关键字,它可以出现在任何允许 C/C++ 语句出现的地方。我们来看一些例子: 简单的 __asm 块: __asm { MOV AL, 2 MOV DX, 0xD007 OUT AL, DX } 在每条汇编指令之前加 __asm 关键字: __asm MOV AL, 2 __asm MOV DX, 0xD007 __asm OUT AL, DX 因为 __asm 关键字是语句分隔符,所以可以把多条汇编指令放在同一行: __asm MOV AL, 2 __asm MOV DX, 0xD007 __asm OUT AL, DX 显然,第一种方法与 C/C++ 的风格很一致,并且把汇编代码和 C/C++ 代码清楚地分开,还避免了重复输入 __asm 关键字,因此推荐使用第一种方法。 不像在 C/C++ 中的&{ }&,__asm 块的&{ }&不会影响 C/C++ 变量的作用范围。同时,__asm 块可以嵌套,而且嵌套也不会影响变量的作用范围。 为了与低版本的 Visual C++ 兼容,_asm 和 __asm 具有相同的意义。另外,Visual C++ 支持标准 C++ 的 asm 关键字,但是它不会生成任何指令,它的作用仅限于使编译器不会出现编译错误。要使用内联汇编,必须使用 __asm 而不是 asm 关键字。 三、 汇编语言 1. 指令集 内联汇编支持 Intel Pentium 4 和 AMD Athlon 的所有指令。更多其它处理器的指令可以通过 _EMIT 伪指令来创建(_EMIT 伪指令说明见下文)。 2. MASM 表达式 在内联汇编代码中,可以使用所有的 MASM 表达式(MASM 表达式是指用来计算一个数值或一个地址的操作符和操作数的组合)。 3. 数据指示符和操作符 虽然 __asm 块中允许使用 C/C++ 的数据类型和对象,但它不能使用 MASM 指示符和操作符来定义数据对象。这里特别指出,__asm 块中不允许 MASM 中的定义指示符(DB、DW、DD、DQ、DT 和 DF),也不允许使用 DUP 和 THIS 操作符。MASM 中的结构和记录也不再有效,内联汇编不接受 STRUC、RECORD、WIDTH 或者 MASK。 4. EVEN 和 ALIGN 指示符 尽管内联汇编不支持大多数 MASM 指示符,但它支持 EVEN 和 ALIGN。当需要的时候,这些指示符在汇编代码里面加入 NOP 指令(空操作)使标号对齐到特定边界。这样可以使某些处理器取指令时具有更高的效率。 5. MASM 宏指示符 内联汇编不是宏汇编,不能使用 MASM 宏指示符(MACRO、REPT、IRC、IRP 和 ENDM)和宏操作符(&&、!、&、% 和 .TYPE)。 6. 段 必须使用寄存器而不是名称来指明段(段名称&_TEXT&是无效的)。并且,段跨越必须显式地说明,如 ES:[EBX]。 7. 类型和变量大小 在内联汇编中,可以用 LENGTH、SIZE 和 TYPE 来获取 C/C++ 变量和类型的大大小。 * LENGTH 操作符用来取得 C/C++ 中数组的元素个数(如果不是一个数组,则结果为 1)。 * SIZE 操作符可以获取 C/C++ 变量的大小(一个变量的大小是 LENGTH 和 TYPE 的乘积)。 * TYPE 操作符可以返回 C/C++ 类型和变量的大小(如果变量是一个数组,它得到的是数组中单个元素的大小)。 例如,程序中定义了一个 8 维的整数型变量: int iArray[8]; 下面是 C 和汇编表达式中得到的 iArray 及其元素的相关值: __asm C Size LENGTH iArray sizeof(iArray)/sizeof(iArray[0]) 8 SIZE iArray sizeof(iArray) 32 TYPE iArray sizeof(iArray[0]) 4 8. 注释 内联汇编中可以使用汇编语言的注释,即&;&。例如: __asm MOV EAX, OFFSET pbB Load address of pbBuff 因为 C/C++ 宏将会展开到一个逻辑行中,为了避免在宏中使用汇编语言注释带来的混乱,内联汇编也允许使用 C/C++ 风格的注释。 9. _EMIT 伪指令 _EMIT 伪指令相当于 MASM 中的 DB,但是 _EMIT 一次只能在当前代码段(.text 段)中定义一个字节。例如: __asm { JMP _CodeLabel _EMIT 0x00 ; 定义混合在代码段的数据 _EMIT 0x01 _CodeLabel: ; 这里是代码 _EMIT 0x90 ; NOP指令 } 10. 寄存器使用 一般来说,不能假定某个寄存器在 __asm 块开始的时候有已知的值。寄存器的值将不能保证会从 __asm 块保留到另外一个 __asm 块中。 如果一个函数声明为 __fastcall 调用方式,则其参数将通过寄存器而不是堆栈来传递。这将会使 __asm 块产生问题,因为函数无法被告知哪个参数在哪个寄存器中。如果函数接收了 EAX 中的参数并立即储存一个值到 EAX 中的话,原来的参数将丢失掉。另外,在所有声明为 __fastcall 的函数中,ECX 寄存器是必须一直保留的。为了避免以上的冲突,包含 __asm 块的函数不要声明为 __fastcall 调用方式。 提示:如果使用 EAX、EBX、ECX、EDX、ESI 和 EDI 寄存器,你不需要保存它。但如果你用到了 DS、SS、SP、BP 和标志寄存器,那就应该用 PUSH 保存这些寄存器。 提示:如果程序中改变了用于 STD 和 CLD 的方向标志,必须将其恢复到原来的值。 四、 使用 C/C++ 元素 1. 可用的 C/C++ 元素 C/C++ 与汇编语言可以混合使用,在内联汇编中可以使用 C/C++ 变量以及很多其它的 C/C++ 元素,包括: 符号,包括标号、变量和函数名; 常量,包括符号常量和枚举型成员; 宏定义和预处理指示符; 注释,包括&/**/&和&//&; 类型名,包括所有 MASM 中合法的类型; typedef 名称,通常使用 PTR 和 TYPE 操作符,或者使用指定的的结构或枚举成员。 在内联汇编中,可以使用 C/C++ 或汇编语言的基数计数法。例如,0x100 和 100H 是相等的。 2. 操作符使用 内联汇编中不能使用诸如&&&&一类的 C/C++ 操作符。但是,C/C++ 和 MASM 共有的操作符(比如&*&和&[]&操作符),都被认为是汇编语言的操作符,是可以使用的。举个例子: int iArray[10]; __asm MOV iArray[6], BX ; Store BX at iArray + 6 (Not scaled) iArray[6] = 0; // Store 0 at iArray+12 (Scaled) 提示:在内联汇编中,可以使用 TYPE 操作符使其与 C/C++ 一致。比如,下面两条语句是一样的: __asm MOV iArray[6 * TYPE int], 0 ; Store 0 at iArray + 12 iArray[6] = 0; // Store 0 at iArray + 12 3. C/C++ 符号使用 在 __asm 块中可以引用所有在作用范围内的 C/C++ 符号,包括变量名称、函数名称和标号。但是不能访问 C++ 类的成员函数。 下面是在内联汇编中使用 C/C++ 符号的一些限制: 每条汇编语句只能包含一个 C/C++ 符号。在一条汇编指令中,多个符号只能出现在 LENGTH、TYPE 或 SIZE 表达式中。 在 __asm 块中引用函数必须先声明。否则,编译器将不能区别 __asm 块中的函数名和标号。 在 __asm 块中不能使用对于 MASM 来说是保留字的 C/C++ 符号(不区分大小写)。MASM 保留字包含指令名称(如 PUSH)和寄存器名称(如 ESI)等。 在 __asm 块中不能识别结构和联合标签。 4. 访问 C/C++ 中的数据 内联汇编的一个非常大的方便之处是它可以使用名称来引用 C/C++ 变量。例如,如果 C/C++ 变量 iVar 在作用范围内: __asm MOV EAX, iV Stores the value of iVar in EAX 如果 C/C++ 中的类、结构或者枚举成员具有唯一的名称,则在 __asm 块中可以只通过成员名称来访问(省略&.&操作符之前的变量名或 typedef 名称)。然而,如果成员不是唯一的,你必须在&.&操作符之前加上变量名或 typedef 名称。例如,下面的两个结构都具有 SameName 这个成员变量: struct FIRST_TYPE { char *pszW int SameN }; struct SECOND_TYPE { int iW long SameN }; 如果按下面方式声明变量: struct FIRST_TYPE ftT struct SECOND_TYPE stT 那么,所有引用 SameName 成员的地方都必须使用变量名,因为 SameName 不是唯一的。另外,由于上面的 pszWeasel 变量具有唯一的名称,你可以仅仅使用它的成员名称来引用它: __asm { MOV EBX, OFFSET ftTest MOV ECX, [EBX]ftTest.SameN 必须使用&ftTest& MOV ESI, [EBX]. pszW 可以省略&ftTest& } 提示:省略变量名仅仅是为了书写代码方便,生成的汇编指令还是一样的。 5. 用内联汇编写函数 如果用内联汇编写函数的话,要传递参数和返回一个值都是非常容易的。看下面的例子,比较一下用独立汇编和内联汇编写的函数: ; PowerAsm.asm ; Compute the power of an integer PUBLIC GetPowerAsm _TEXT SEGMENT WORD PUBLIC 'CODE' GetPowerAsm PROC PUSH EBP ; Save EBP MOV EBP, ESP ; Move ESP into EBP so we can refer ; to arguments on the stack MOV EAX, [EBP+4] ; Get first argument MOV ECX, [EBP+6] ; Get second argument SHL EAX, CL ; EAX = EAX * (2 ^ CL) POP EBP ; Restore EBP RET ; Return with sum in EAX GetPowerAsm ENDP _TEXT ENDS END C/C++ 函数一般用堆栈来传递参数,所以上面的函数中需要通过堆栈位置来访问它的参数(在 MASM 或其它一些汇编工具中,也允许通过名称来访问堆栈参数和局部堆栈变量)。 下面的程序是使用内联汇编写的: // PowerC.c #include int GetPowerC(int iNum, int iPower); int main() { printf(&3 times 2 to the power of 5 is %d\n&, GetPowerC( 3, 5)); } int GetPowerC(int iNum, int iPower) { __asm { MOV EAX, iN Get first argument MOV ECX, iP Get second argument SHL EAX, CL ; EAX = EAX * (2 to the power of CL) } // Return with result in EAX } 使用内联汇编写的 GetPowerC 函数可以通过参数名称来引用它的参数。由于 GetPowerC 函数没有执行 C 的 return 语句,所以编译器会给出一个警告信息,我们可以通过 #pragma warning 禁止生成这个警告。 内联汇编的其中一个用途是编写 naked 函数的初始化和结束代码。对于一般的函数,编译器会自动帮我们生成函数的初始化(构建参数指针和分配局部变量等)和结束代码(平衡堆栈和返回一个值等)。使用内联汇编,我们可以自己编写干干净净的函数。当然,此时我们必须自己动手做一些有关函数初始化和扫尾的工作。例如: void __declspec(naked) MyNakedFunction() { // Naked functions must provide their own prolog. __asm { PUSH EBP MOV ESP, EBP SUB ESP, __LOCAL_SIZE } . . . // And we must provide epilog. __asm { POP EBP RET } } 6. 调用 C/C++ 函数 内联汇编中调用声明为 __cdecl 方式(默认)的 C/C++ 函数必须由调用者清除参数堆栈,下面是一个调用 C/C++ 函数例子: #include char szFormat[] = &%s %s\n&; char szHello[] = &Hello&; char szWorld[] = & world&; void main() { __asm { MOV EAX, OFFSET szWorld PUSH EAX MOV EAX, OFFSET szHello PUSH EAX MOV EAX, OFFSET szFormat PUSH EAX CALL printf // 压入了 3 个参数在堆栈中,调用函数之后要调整堆栈 ADD ESP, 12 } } 提示:参数是按从右往左的顺序压入堆栈的。 如果调用 __stdcall 方式的函数,则不需要自己清除堆栈。因为这种函数的返回指令是 RET n,会自动清除堆栈。大多数 Windows API 函数均为 __stdcall 调用方式(仅除 wsprintf 等几个之外),下面是一个调用 MessageBox 函数的例子: #include TCHAR g_tszAppName[] = TEXT(&API Test&); void main() { TCHAR tszHello[] = TEXT(&Hello, world!&); __asm { PUSH MB_OK OR MB_ICONINFORMATION PUSH OFFSET g_tszAppN 全局变量用 OFFSET LEA EAX, tszH 局部变量用 LEA PUSH EAX PUSH 0 CALL DWORD PTR [MessageBox] ; 注意这里不是 CALL MessageBox,而是调用重定位过的函数地址 } } 提示:可以不受限制地访问 C++ 成员变量,但是不能访问 C++ 的成员函数。 7. 定义 __asm 块为 C/C++ 宏 使用 C/C++ 宏可以方便地把汇编代码插入到源代码中。但是这其中需要额外地注意,因为宏将会扩展到一个逻辑行中。 为了不会出现问题,请按以下规则编写宏: 使用花括号把 __asm 块包围住; 把 __asm 关键字放在每条汇编指令之前; 使用经典 C 风格的注释(&/* comment */&),不要使用汇编风格的注释(&; comment&)或单行的 C/C++ 注释(&// comment&); 举个例子,下面定义了一个简单的宏: #define PORTIO __asm \ /* Port output */ \ { \ __asm MOV AL, 2 \ __asm MOV DX, 0xD007 \ __asm OUT DX, AL \ } 乍一看来,后面的三个 __asm 关键字好像是多余的。其实它们是需要的,因为宏将被扩展到一个单行中: __asm /* Port output */ { __asm MOV AL, 2 __asm MOV DX, 0xD007 __asm OUT DX, AL } 从扩展后的代码中可以看出,第三个和第四个 __asm 关键字是必须的(作为语句分隔符)。在 __asm 块中,只有 __asm 关键字和换行符会被认为是语句分隔符,又因为定义为宏的一个语句块会被认为是一个逻辑行,所以必须在每条指令之前使用 __asm 关键字。 括号也是需要的,如果省略了它,编译器将不知道汇编代码在哪里结束,__asm 块后面的 C/C++ 语句看起来会被认为是汇编指令。 同样是由于宏展开的原因,汇编风格的注释(&; comment&)和单行的 C/C++ 注释(&// commen&)也可能会出现错误。为了避免这些错误,在定义 __asm 块为宏时请使用经典 C 风格的注释(&/* comment */&)。 和 C/C++ 宏一样 __asm 块写的宏也可以拥有参数。和 C/C++ 宏不一样的是,__asm 宏不能返回一个值,因此,不能使用这种宏作为 C/C++ 表达式。 不要不加选择地调用这种类型的宏。比如,在声明为 __fastcall 的函数中调用汇编语言宏可能会导致不可预料的结果(请参看前文的说明)。 8. 转跳 可以在 C/C++ 里面使用 goto 转跳到 __asm 块中的标号处,也可以在 __asm 块中转跳到 __asm 块里面或外面的标号处。__asm 块内的标号是不区分大小写的(指令、指示符等也是不区分大小写的)。例如: void MyFunction() { goto C_D /* 正确 */ goto c_ /* 错误 */ goto A_D /* 正确 */ goto a_ /* 正确 */ __asm { JMP C_D 正确 JMP c_ 错误 JMP A_D 正确 JMP a_ 正确 a_dest: ; __asm 标号 } C_Dest: /* C/C++ 标号 */
} 不要使用函数名称当作标号,否则将转跳到函数中执行,而不是标号处。例如,由于 exit 是 C/C++ 的函数,下面的转跳将不会到 exit 标号处: ; 错误:使用函数名作为标号 JNE exit . . . exit: . . . 美元符号&$&用于指定当前指令位置,常用于条件跳转中,例如: JNE $+5 ; 下面这条指令的长度是 5 个字节 JMP _Label NOP ; $+5,转跳到了这里 . . . _Label: . . . 五、在 Visual C++ 工程中使用独立汇编 内联汇编代码不易于移植,如果你的程序打算在不同类型的机器(比如 x86 和 Alpha)上运行,你可能需要在不同的模块中使用特定的机器代码。这时候你可以使用 MASM(Microsoft Macro Assembler),因为 MASM 支持更多方便的宏指令和数据指示符。 这里简单介绍一下在 Visual Studio .NET 2003 中调用 MASM 编译独立汇编文件的步骤。 在 Visual C++ 工程中,添加按 MASM 的要求编写的 .asm 文件。在解决方案资源管理器中,右击这个文件,选择&属性&菜单项,在属性对话框中,点击&自定义生成步骤&,设置如下项目: 命令行:ML.exe /nologo /c /coff &-Fo$(IntDir)\$(InputName).obj& &$(InputPath)& 输出:$(IntDir)\$(InputName).obj 如果要生成调试信息,可以在命令行中加入&/Zi&参数,还可以根据需要生成 .lst 和 .sbr 文件。 如果要在汇编文件中调用 Windows API,可以从网上下载 MASM32 包(包含了 MASM 汇编工具、非常完整的 Windows API 头文件/库文件、实用宏以及大量的 Win32 汇编例子等)。相应地,应该在命令行中加入&/I X:\MASM32\INCLUDE&参数指定 Windows API 汇编头文件(.inc)的路径。MASM32 的主页是:,里面可以下载最新版本的 MASM32 包。
在A按钮的消息响应函数中加入如下代码: GetDlgItem(B按钮的ID值)-&EnableWindow(false); 这样就可以了!
1. 因为编辑框是按行显示的,垂直居中可能导致跨行显示,所以做不到。你可以用CFont类设置编辑框的字体大小,把字体改到符合你的编辑框大小即可。 2. 你把编辑框设为不可编辑,或者EnableWindow(false),这样用户就无法输入了,你可以用UpdateData(false)里面显示自己想要的内容,就不会出现你不想要的符号。
ping或者你可以试试tracert这个路由跟踪命令。
[filename, pathname]= uigetfile('*.xls'); file=[pathname filename]; x=xlsread(file); x=x(:,2);
import java.util.*;class ThreadTest {static int type = 4, num = 10; //定义资源数目和线程数目static int[] resource = new int[type]; //系统资源总数//static int[] copyResource = new int[type]; //副本static Random rand = new Random();static Bank[] bank = new Bank[num]; //线程组Bank temp = new Bank();public void init() {//初始化组中每个线程,随机填充系统资源总数for(int i = 0; i & i++)resource[i] = rand.nextInt(10) + 80;System.out.print(&Resource:&);for(int i = 0; i & i++)System.out.print(& & + resource[i]);System.out.println(&&);for(int i = 0; i & bank. i++)bank[i] = new Bank(&#& + i);}public ThreadTest4() {init();}class Bank extends Thread {//银行家算法避免死锁public int[]max = new int[type], //总共需求量need = new int[type], //尚需资源量allocation = new int[type]; //已分配量private int[] request = new int[type], //申请资源量copyResource = new int[type]; //资源副本private boolean isFinish = //线程是否完成int[][] table = new int[bank.length][type*4]; //二维资源分配表private void init() {// 随机填充总共、尚需、已分配量synchronized(resource) {for(int i = 0; i & i++) {max[i] = rand.nextInt(5) + 10;need[i] = rand.nextInt(10);allocation[i] = max[i] - need[i];resource[i] -= allocation[i]; //从系统资源中减去已分配的}printer();for(int i = 0; i & i++) {if(resource[i] & 0) {//若出现已分配量超出系统资源总数的错误则退出System.out.println(&The summation of Threads' allocations is out of range!&);System.exit(1);}}}}public Bank(String s) {setName(s);init();start();}public Bank() {//none}public void run() {try {sleep(rand.nextInt(2000));}catch(InterruptedException e) {throw new RuntimeException(e);}while(true) {//程序没有完成时一直不断申请资源if(askFor() == false) {try {sleep(1000);}catch(InterruptedException e) {throw new RuntimeException(e);}}elsetryRequest();if(noNeed() == true)}//休眠一段时间模拟程序运行try {sleep(1000);}catch(InterruptedException e) {throw new RuntimeException(e);}System.out.println(getName() + & finish!&);synchronized(resource) {//运行结束释放占有资源for(int i = 0; i & i++) {resource[i] += allocation[i];need[i] = allocation[i] = max[i] = 0;}}}private void printer() {//打印当前资源信息System.out.print(getName() + & Max:&);for(int i = 0; i & i++)System.out.print(& & + max[i]);System.out.print(& Allocation:&);for(int i = 0; i & i++)System.out.print(& & + allocation[i]);System.out.print(& Need:&);for(int i = 0; i & i++)System.out.print(& & + need[i]);System.out.print(& Available:&);for(int i = 0; i & i++)System.out.print(& & + resource[i]);System.out.println(&&);}private boolean askFor() {//随机产生申请资源量并检测是否超标boolean canAsk =for(int i = 0; i & i++) {request[i] = rand.nextInt(20);//防止申请量超过所需量if(request[i] & need[i])request[i] = need[i];}for(int i = 0; i & i++) //防止随机申请资源全为0if(request[i] & 0)canAsk =synchronized(resource) {//锁住可供资源检查是否超标for(int i = 0; i & i++) {if(request[i] & resource[i])//如果申请资源超过可供资源则等待一段时间后重新申请}}return canA}private void tryRequest() {//创建副本尝试分配请求synchronized(resource) {for(int i = 0; i & i++)//依然要防止请求量超出范围if(request[i] & resource[i])for(int i = 0; i & i++) {//复制资源量并减去需求量到一个副本上copyResource[i] = resource[i];copyResource[i] -= request[i];}System.out.print(getName() + & ask for:&);for(int i = 0; i & i++)System.out.print(& & + request[i]);System.out.println(&&);if(checkSafe() == true) {//如果检查安全则将副本值赋给资源量并修改占有量和需求量for(int i = 0; i & i++) {resource[i] = copyResource[i];allocation[i] += request[i];need[i] -= request[i];}System.out.println(getName() + & request succeed!&);}elseSystem.out.println(getName() + & request fail!&);}}private boolean checkSafe() {//银行家算法检查安全性synchronized(bank) {//将线程资源信息放入二维资源分配表检查安全性,0~type可用资源/type~type*2所需资源/type*2~type*3占有资源/type*3~-1可用+占用资源for(int i = 0; i & bank. i++) {for(int j = j & type*2; j++) {table[i][j] = bank[i].need[j%type];}for(int j = type*2; j & type*3; j++) {table[i][j] = bank[i].allocation[j%type];}}//冒泡排序按需求资源从小到大排for(int i = 0; i & bank. i++) {for(int j = j & bank.length-1; j++) {sort(j, 4);}}//进行此时刻的安全性检查for(int i = 0; i & i++) {table[0][i] = copyResource[i];table[0][i+type*3] = table[0][i] + table[0][i+type*2];if(table[0][i+type*3] & table[1][i+type])}for(int j = 1; j & bank.length-1; j++) {for(int k = 0; k & k++) {table[j][k] = table[j-1][k+type*3];table[j][k+type*3] = table[j][k] + table[j][k+type*2];if(table[j][k+type*3] & table[j+1][k+type])}}}}private void sort(int j, int k) {//递归冒泡排序int tempNif(table[j][k] & table[j+1][k]) {for(int i = i & type*2; i++) {tempNum = table[j][i];table[j][i] = table[j+1][i];table[j+1][i] = tempN}/*temp = bank[j];bank[j] = bank[j+1];bank[j+1] =*/}else if(table[j][k] == table[j+1][k] && k & type*2) //此资源量相同时递归下一个资源量排序并且防止超出范围sort(j, k+1);}private boolean noNeed() {//是否还需要资源boolean finish =for(int i = 0; i & i++) {if(need[i] != 0) {finish =}}}}public static void main(String[] args) {ThreadTest t = new ThreadTest();//后台线程,设定程序运行多长时间后自动结束new Timeout(30000, &---Stop!!!---&);
一个connection对象描述了到数据源的物理连接。你可以使用odbc也可以利用ole db来连接数据源。当你打开一个connectiont对象时你就会试图连接数据库。Connection对象的state属性会告诉我们连接是否成功。通过connection对象的execute方法向数据源发送SQL语句或运行存存储过程。如果你向数据源发送的命令要求数据源返回记录集,那么记录集对象会自动的被创建。当你连接上数据库后你可以关闭connection对象。Connection 对象的方法和属性有哪些呢?下表列出了connection一些常用的方法。方法描述Open打开一个数据源连接Close关闭与数据源的连接以及相关的对象Execute执行一个相关的查询(SQL语名或存储过程,或数据提供者特定文本)BeginTrans开始一个新事务CommitTrans.保存一些改变或当前的事务目的是为开始一个新事务RollbackTrans取消一些改变在当前事务和结束事务时,目的是开始一个新事务下表列出了一些常用的CONNECTION对象的属性。属性描述ConnectionString包含建立与数据源的连接的相关信息ConnectionTimeout显示尝试建立与数据源的连接和产生错误所花去的时间CommandTimeout显示在中断一个尝试和返回一个错误前执行该项指令所花去的时间State表明是否与数据源连接上或已关闭或正在连接中Provider显示连接提供者的名称Version显示ado版本号CursorLocation设定或返回一个提供者光标函数的定值如何利用connection对象连接数据源?用一个connnection 对象,只要指定一个connection字符串,目的是用来指定你想要联结的数据源,然后调用open方法来建立链接。通过connection string提供的信息用OPEN方法可以非常轻松的建立与数据的连接。如果你决定用connection对象进行工作,那么你可以用它的STATE属性。如果connection对象被打开了那么它的返回值为adstateopen,如果不是它的返回值为adstateclosed.下面的例子是利用odbc建立与SQL的连接。Sub ConnectionExample1()Dim cnn As ADODB.ConnectionSet cnn = New ADODB.Connection' 用ODBC打开连接.cnn.Open &Pubs&, &sa&, &&' 检查是否完成连接If cnn.State = adStateOpen ThenMsgBox &Welcome to Pubs!&ElseMsgBox &Sorry. No Pubs today.&End If关闭connection对象cnn.CloseEnd Sub如果你只需要连接一个数据源。下面的代码要比上面的简单。作为选择,你可以创建一个connection对象,在调用open方法前你可以先设置ConnectionString属性。这种方法容许你连接一个数据源后再重新用这个对象再连接另一个数据源。Sub ConnectionExample2()Dim cnn As ADODB.ConnectionSet cnn = New ADODB.Connection' 用ODBC DSN 建立连接cnn.ConnectionString = &DSN=PUID=PWD=;&cnn.Open' 检查是否与数据源建立了连接.If cnn.State = adStateOpen ThenMsgBox &Welcome to Pubs!&ElseMsgBox &Sorry. No Pubs today.&End If'关闭connection对象cnn.CloseEnd Sub在你对CONNECTION对象建立连接前,你可以设置它的其它属性。例如,你可以设置连接超时。Sub ConnectionExample3()Dim cnn As ADODB.ConnectionSet cnn = New ADODB.Connection' 设置CONNECTION属性cnn.ConnectionString = &DSN=PUID=PWD=;&cnn.ConnectionTimeout = 30' 打开connection 对象cnn.Open' 检查是否已经连接上数据源If cnn.State = adStateOpen ThenMsgBox &Welcome to Pubs!&ElseMsgBox &Sorry. No Pubs today.&End If' 关闭connection对象cnn.CloseEnd SubConnectionString属性的语法结构假定数据源已经被建立或利用系统管理员的身份使用ODBC.不依靠存在的odbc数据源变得流行起来。这样就减轻了安装的负担。下面的例子是一个连接SQL SERVER的可选择性的方法,仅依靠本身存在的odbc driver. Sub ConnectionExample4()Dim cnn As ADODB.ConnectionSet cnn = New ADODB.Connection'利用引用ODBC DRIVER打开CONNECTION对象cnn.ConnectionString = &driver={SQL Server};& & _&server=uid=pwd=;database=pubs&cnn.Open' Find out if the attempt to connect worked.'检查是否已经建立连接If cnn.State = adStateOpen ThenMsgBox &Welcome to Pubs!&ElseMsgBox &Sorry. No Pubs today.&End If' 关闭CONNECTION对象cnn.CloseEnd Sub现在ODBC DRIVER 有更广的变化,你可以用ADO和数据源对话。不久将会有更的的OLE DB提供者与数据源建立连接。The Microsoft& OLE DB Provider for ODBC是当前ADO默认的提供者。你能用不同的提供者设置CONNECTION对象的provider属性。Sub ConnectionExample5()Dim cnn As ADODB.ConnectionSet cnn = New ADODB.Connection'设置PROVIDER属性利用OLE DB Provider for ODBCcnn.Provider = &MSDASQL&'用ODBC DSN打开CONNECTION对象cnn.ConnectionString = &driver={SQL Server};& & _&server=uid=pwd=;database=pubs&cnn.Open'检查是否连接上数据源If cnn.State = adStateOpen ThenMsgBox &Welcome to Pubs!&ElseMsgBox &Sorry. No Pubs today.&End If'关闭CONNECTION对象cnn.CloseEnd Sub上面的代码设置PROVIDER属性不是必须因为ADO的默认提供者就是OLE DB PROVIDER FOR ODBC.这里只是认你知道当你用其它的OLE DB PROVIDERS时如何设置。我如何用CONNECTION对象执行COMMAND?CONNNETION的EXECUTE方法用来发送一个COMMAND(一个SQL指令或其它的文本信息)到数据源。如果在SQL指令中要求返回几行记录集,一个RECORDSET对象将会被自动的建立。Sub ConnectionExample6()Dim cnn As ADODB.ConnectionDim rs As ADODB.RecordsetSet cnn = New ADODB.Connection' 引用 ODBC driver 建立连接.cnn.ConnectionString = &driver={SQL Server};& & _&server=uid=pwd=;database=pubs&cnn.Open' 执行SQL 语句创立一个RECORDSET对象.Set rs = cnn.Execute(&Select * From authors&)' 显示第一个 author.MsgBox rs(&au_fname&) & & & & rs(&au_lname&)' 断开连接rs.CloseEnd Sub记住用EXECUTE返回的RECORDSET是只读的,并且是仅向前光标。如果你需要用RECORDSET物件的更多函数,你首先要创建RECORDSET物件并设置想要设置的属性然后用OPEN方法打开它来执行查询和返回想要得到的光标类型.在下面的例子中,COMMAND物件执行删除指令,由于没有数据集需要返回,你不需要额外的用RECORDSET物件.删除了多少行数据?你可以通过RECORDSAFFECTED参数知道它.Sub ConnectionExample7()Dim cnn As ADODB.ConnectionDim rs As ADODB.RecordsetSet cnn = New ADODB.Connection'引用ODBC DRIVER建立连接cnn.ConnectionString = &driver={SQL Server};& & _&server=uid=pwd=;database=pubs&cnn.Open'向数据源发送删除指令cnn.Execute (&Delete From authors Where au_id = '011-01-0111'&)' 检查有多少行数据被删除Set rs = cnn.Execute(&Select @@rowcount&)' 显示第一个字段MsgBox rs(0) & & rows deleted&'关闭连接rs.CloseEnd Sub下面的例子,这个COMMAND通过指定的存储过程的名字运行数据源的存储过程.由于需要返回数据,所以你必需建立RECORDSET物件。Sub ConnectionExample8()Dim cnn As ADODB.ConnectionDim rs As ADODB.RecordsetSet cnn = New ADODB.Connection' 引用ODBC DRIVER来建立连接cnn.ConnectionString = &driver={SQL Server};& & _&server=uid=pwd=;database=pubs&cnn.Open' 建立RECORDSET对象来运行存储过程Set rs = cnn.Execute(&Exec byroyalty 50&)' 通过循环来显示AUTHOR的IDDo While Not rs.EOFMsgBox rs(&au_id&)rs.MoveNextLoop' 断开连接rs.CloseEnd Sub
&& a=magic(5) a = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 && csvwrite('csv.txt',a) && !type csv.txt 17,24,1,8,15 23,5,7,14,16 4,6,13,20,22 10,12,19,21,3 11,18,25,2,9
一般在程序里面写成除二取余数的方法来得到。跟二进制的数的取法手工算法一样。任意数除2以后,如果有小数点,就在堆栈中写进一个1,没有小数就写0。然后除完以后,把堆栈的数倒取出来,就成了该数字的二进制。
你用的什么编译器。。 自己去翻math.h好了,肯定里面有声明过好几个不同的pow函数原型 你的这几个调用里面有好几个是直接用常量来的,编译器不能确定它们的数据类型,也就不知道该用哪个重载的函数,学过C++以后应该会明白 学C就用专门的C编译器吧,古老的Turbo C 2.0 用C++编译器难免出这种让你没概念的错误 最常见的应该这个 double pow(double _X, double _Y); 你在调用里面都加上强制类型转换试试 s11=(int)pow((double)(-1),(double)(j-1));
private void button1_Click(object sender, EventArgs e)        {            //获取数据            DataSet ds = GetSqlData();            try            {                foreach (DataRow dr in ds.Tables[0].Rows)                {                    string sql = string.Format(&Insert Into t1 (a1,a2,a3) values ({0},{1},{2})&,                        dr[&a1&].ToString(),                        dr[&a2&].ToString(),                        dr[&a3&].ToString());                    //插入数据                    ExecuteSql(sql, &Server=.;DataBase=COCNEW_BACKUP;uid=password=root123;&);                }            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        public int ExecuteSql(string SQLString, string connectionString)        {            using (SqlConnection connection = new SqlConnection(connectionString))            {                using (SqlCommand cmd = new SqlCommand(SQLString, connection))                {                    try                    {                        connection.Open();                        int rows = cmd.ExecuteNonQuery();                                            }                    catch (System.Data.SqlClient.SqlException E)                    {                        connection.Close();                        throw new Exception(E.Message);                    }                }            }        }
我是做.Net开发的,可以很负责任地说:在Visual Studio 2008面试之前,Visual Studio 2005是世界上最好用最强大的编程IDE。Visual Studio 2005支持多语言,初学者可以选择VB.Net或C#两种语言入手,相比晦涩的旧编程语言,.Net架构下的VB.Net和C#有着长足的进展,尤其是C#简明强大的语言,已经让它成为目前世界上最完善、最具潜力的开发语言。此外,.Net平台还有另一个无可比拟的优势:.Net框架拥有人类有史以来最庞大而全面的类库,这使很多看似复杂的工作变得手到擒来。.Net在短短几年内已经同化了国内60%以上的程序员加入其阵营,由此带来的丰富的开发知识文献,使得.Net的学习途径广博;与此同时,随着.Net的不断发展、扩张,其应用也越来越受到重视,所以是非常有前途的一个编程类目。而现在去学习陈旧的6.0,显然已是不合时宜了,无论易学性、易用性都无法和新版相提并论。
色深是指在某一分辨率下,每个像点可以由多少种色彩来描述,单位是“bit”(位)具体地说,8位的色深是将所有颜色分为256种,还有“增强色”,指的是16位及以上的色深。在“增强色”基础上又定义了“真彩色”,有24位、32位等,目前的显示卡都支持32位色。
可以这样,你的工具栏里的复制和粘贴都对应有各自的消息响应函数,比如说分别为Copy1()和Paste1();在右键菜单里的复制和粘贴的消息响应函数(比如说分别为Copy2()和Paste2())里分别调用工具栏里的复制和粘贴对应的消息响应函数:如Copy2(){            Copy1();            }Paste2(){           Paste1();            }应该是这样.
首先是文件读写,其次是动态分配一个数组来接收n*m的矩阵内容

我要回帖

更多关于 华为荣耀和畅玩的区别 的文章

 

随机推荐