用代码控制VS的包含目录、库目录、附加包含目录
   我的程序要调用matlab引擎,需要把这几个目录指向matlab安装路径的某些文件夹下,通过VS的属性可以设置。但是当我换一台电脑的时候,这些路径又要重新设置,不便于用户使用。于是我想通过代码来设置这些目录。通过注册表能够获取matlab的安装目录,但是却不知道怎么用代码来设置目录。网上一个相关的问题都搜不到,只好求助于各位大神了!

3个回答

1)首先自己是不能设置自己的,你想想程序要想运行首先得编译,而编译时需要路径配置,所以说你的程序是不可能根据当前环境改变引用路径的
2)当然你可以写一个其他的小程序来达到目的,比如说你可以在原程序中定义几个宏比如#define MATLAB_DIR "绝对路径",然后引用文件时采用绝对路径像这样MATLAB_DIR/XXX.h,然后每次换一个电脑,你就用你另外的小程序,把宏定义中的绝对路径换一下就可以了

shihengzhen101
AlbertS 回复御查监史: 当然是把定义这个宏的那个代码文件改了
3 年多之前 回复
wzn491574452
御查监史 另外的程序怎么修改这个程序的宏啊?
3 年多之前 回复

直接修改vs生成的makefile,在makefile里面设置包含目录、库目录、附加包含目录。这样每次不需要到vs的属性中进行设置,只需要将以前用过的makefile中相应的内容拷贝过来就可以了

可是如果换台电脑,这些目录又得重新设置,如果让用户来设置显得程序不友好,毕竟程序是要给别人用的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
VS项目属性用代码控制
由于我的程序需要调用matlab的库,项目的包含目录、库目录等得指向matlab,但是不同的电脑matlab的安装路径不一样,每次都手动去设置显得很麻烦。请问能不能通过代码设置这些属性呢?就像用#progma("lib")来设置附加依赖项一样
C/C++ .h头文件VS2008包含问题
VS2008里面新建了一个项目Test,自己写了一个头文件sum.h,内容如下: ```cpp #ifndef SUM_H #define SUM_H int sum(int a,int b); #endif ``` 实现函数sum.cpp,代码如下: ```cpp #include "sum.h" int sum(int a,int b ) { return a+b; } ``` main函数如下:main.cpp代码: ```cpp #include "sum.h" #include <iostream> using namespace std; int main() { int a,b; while (cin>>a>>b) { cout<<sum(a,b)<<endl; } return 0; } ``` 编译可以运行,结果也没什么问题。 但是当我把sum.h,sum.cpp放到外面的一个文件夹include\TEST里面的时候,并且在C/C++ ->常规->附加包含目录中添加了include文件夹 并且main.cpp第一行代码改为`#include "test/sum.h"`(敲test/提示有sum.h文件,所以包含路径是没什么问题的)时,编译通过不,报错: `main.obj : error LNK2019: 无法解析的外部符号 "int __cdecl sum(int,int)" (?sum@@YAHHH@Z),该符号在函数 _main 中被引用` 难道这个头文件和cpp文件非要和主函数放在一个目录下才能用吗?放在外部怎么引用?
vc++ .h文件中只有对应的目录怎么处理
最近gsoap调用openssl来处理加密,下载openssl之后,直接解压缩,在vc的附加目录中包含了openssl的include目录 然后编译程序,提示bio.h报语法错误 bio.h文件的内容是 ../../crypto/bio/bio.h 是一个目录,而在这个目录里面的bio.h,才是真正想要的bio.h文件 想问的就是在VC中,要怎么处理,程序才能够自动识别这是个目录,并且跳转到相应的目录然后自动打开这个bio.h 备注:不能把源代码 ../../crypto/bio/bio.h 更改成 #include"../../crypto/bio/bio.h" 应为还有20多个.h文件都一模一样,这么改我岂不得累死
从SQL数据库中获取数据写入WORD文档,请附加代码,谢谢
基本格式:数据写入时需按一定格式(写入内容包含表格、文字、图片)、标题居中等等 标题(含字体) 一、内容1 1、******* 2、***** 二、内容二 (1)***** 三、表格(或图片)
DLL文件包含自己生成的lib文件,编译错误
1. 我先用空项目 添加了lua的文件 生成了 lua.lib文件 2. 我创建了一个MFC_DLL文件 1)在项目->属性->C/C++->附加包含目录里包含了 lua所有.h .c的文件夹 2)在项目->属性->连接器->常规->附加库目录里包含了lua.lib的文件夹 3)在项目->属性->连接器->输入->附加依赖项里输入了lua.lib 我创建的 .h文件的代码 #infndef LUASSSS_H #define LUASSSS_H #include <windows.h> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } extern lua_State *L; #endif 我创建的 .cpp文件的代码 #include "StdAfx.h" #include "Luassss.h" lua_State *L = luaL_newstate(); 代码显示无错误 但是编译的时候出现各种错误 请问是我哪里出错了????? 谢谢帮忙 我自己摸索了2天都没搞定 头都大了 error LNK2005: _strstr 已经在 libcmtd.lib(strstr.obj) 中定义 error LNK2005: _strchr 已经在 libcmtd.lib(strchr.obj) 中定义 error LNK2005: _fclose 已经在 libcmtd.lib(fclose.obj) 中定义 error LNK2005: _ferror 已经在 libcmtd.lib(feoferr.obj) 中定义 error LNK2005: _ungetc 已经在 libcmtd.lib(ungetc.obj) 中定义 error LNK2005: ___iob_func 已经在 libcmtd.lib(_file.obj) 中定义 error LNK2005: _fread 已经在 libcmtd.lib(fread.obj) 中定义 error LNK2005: _feof 已经在 libcmtd.lib(feoferr.obj) 中定义 error LNK2005: __errno 已经在 libcmtd.lib(dosmap.obj) 中定义 error LNK2005: _realloc 已经在 libcmtd.lib(dbgrealloc.obj) 中定义 error LNK2005: _free 已经在 libcmtd.lib(dbgfree.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _exit 已经在 libcmtd.lib(crt0dat.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isspace 已经在 libcmtd.lib(_ctype.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtoul 已经在 libcmtd.lib(strtol.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtod 已经在 libcmtd.lib(strtod.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _sprintf 已经在 libcmtd.lib(sprintf.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strcspn 已经在 libcmtd.lib(strcspn.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strcoll 已经在 libcmtd.lib(strcoll.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _floor 已经在 libcmtd.lib(_floor_pentium4_.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _iscntrl 已经在 libcmtd.lib(_ctype.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isalnum 已经在 libcmtd.lib(_ctype.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isalpha 已经在 libcmtd.lib(_ctype.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isdigit 已经在 libcmtd.lib(_ctype.obj) 中定义 1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _localeconv 已经在 libcmtd.lib(lconv.obj) 中定义 1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1> 正在创建库 ..\test\testdll.lib 和对象 ..\test\testdll.exp 1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library 1>..\test\testdll.dll : fatal error LNK1169: 找到一个或多个多重定义的符号 1> 1>生成失败。 1> 1>已用时间 00:00:01.05 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
汇编语言代码改写,把如下代码的姓氏改为“杜”字该怎么改,求大神帮助
;; BIOS会把512字节的引导扇区加载到 0000:7c00 处, ;; 然后跳转到0000:7c00处,将控制权交给引导代码。 org 07c00h ;这一行告诉编译器,我们的代码将被加载到7c00处。 mov ax, cs ;将代码段寄存器的值送入AX mov ds, ax ;将数据段的地址置为代码段的地址? mov es, ax ;将附加段的地址置为代码段的地址? call DispStr ;调用显示字符串例程 jmp $ ;无限循环, $表示当前行编译后的地址 ;; 以上就是整个程序的执行过程了 ;; 下面是DispStr子程序 DispStr: mov ax, BootMessage ;将字符串首地址传给寄存器ax mov bp, ax ;CPU将用ES:BP来寻址字符串 mov cx, 300 ;通过CX,CPU知道字符串的长度 mov ax, 01301h ;AH=13表示13号中断, AL=01H,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标 mov bx, 000fh ;黑底红字, BL=0CH,高亮 mov dl, 0 ;dh表示在第几行显示,dl表示第几列显示 int 10h ;BIOS的10H中断的13号中断用于显示字符串 ret BootMessage: db "",13,10," **************",13,10," **************",13,10," *** *** **",13,10," **************",13,10," **************",13,10," *** ** **",13,10," **************",13,10," **************",13,10," *********** **",13,10," *********** **",13,10," ****** ** **",13,10," ** *** ** **",13,10," ** ******** **",13,10," *** ***********",13,10,"*** ****",13,10," ** ****", ;对NASM来讲,标号和变量的作用一样, db表示define byte ;; $当前行被汇编后的地址,$$表示一个section开始处的地址,本程序只有一个section,所以指0x7c00 times 510-($-$$) db 0 ;填充剩下空间,使生成的二进制恰好为512字节 dw 0xaa55 ;结束标志,如果发现扇区以0xAA55结束,则BIOS认为它是一个引导扇区,dw表示define word
多人聊天器求大神代码!
1. 对功能的规定 分必选项和任选项,其中,必选项是必须完成的,属于项目答辩的入口条件,所有人都要做,未完成者取消答辩资格; 任选项不是入口条件,但每完成一项都会加分,对于完成了必选项的同学,尽可能地多完成一些任选项,以期获得更高的答辩成绩。 如果所有项(包括必选和任选)都完成,那么功能分就是满分。 如果设计思路、界面效果、代码组织等方面有个性(或和别人的不同),则获得附加分。 1.1 服务器功能 1.1.1配置文件 属性:任选 描述:服务器的配置从配置文件中获取,内容包括服务器地址(服务器IP 和 port),具体格式如下: SERVER_IP = 192.168.1.11 PORT = 12012 注意:具体IP和port以本地为准 1.1.2账户文件 属性:必选 描述:客户端注册的用户名和密码需要服务器保存。必须完成下列所有情况: ●内容为用户名和用户密码列表; ●必须用文本形式; ●用户注册用户名重复,需要提示重新选择用户名 ●用户登录时用户名重复,需要提示重新选择用户名 ●用户名密码输入错误,应该提示。给3次连续错误机会,超过3次退出。 1.1.3支持多客户端 属性:必选 描述:基于tcp协议的客户端服务器通讯,服务器采用多线程支持多个客户端连接。 1.1.4业务功能 属性:必选 描述:群聊,单聊 1.1.5链表记录会话连接 属性:必选 描述:服务端使用链表记录当前客户端的会话连接,多个线程访问同一个链表,采用互斥锁来控制。 链表包含下列信息:客户端的ip地址、连接时间,用户名。 1.1.6链表记录动态维护 属性:任选 描述:服务端能够动态维护链表记录;服务器有命令供查询显示。 1.1 客户端功能 1.2.1注册 属性:必选 描述:客户端提供注册用户名,密码功能,用户名密码通过网络传输到服务器认证(用户名不可重复),认证通过后写入账户文件。 1.2.2登陆(认证) 属性:必选 描述:服务器和客户端增加用户密码登陆机制,包含如下流程: ●客户端把接受的用户名密码发送至服务器; ●服务器启动后从配置文件中读取用户信息形成数据表,根据此来验证密码。验证后返回认证结果给客户端(不可一个用户名同时登录) ●如果认证正确,服务器开始接受客户端的命令;认证错误重新认证(3次登陆错误退出) 1.3心跳机制 属性:必选 描述:客户端与服务端之间使用心跳机制,必须完成下列所有情况: ●客户端定时向服务端发送一个数据包(心跳包,内容不限,3秒间隔),证明自己活着; ●服务端显示来自某个IP地址客户端的心跳包; 1.4心跳异常 属性:任选 描述:服务器超过一定的时间没有收到客户端的心跳包(3秒间隔),连续5个包没有接收到则说明客户端出现问题,必须做出如下的处理: ●记录状况; ●断开连接; 1.5聊天功能 属性:必选 描述:两客户端之间能够直接文字通信(类似于QQ聊天), ●能够查询在线列表,具体信息从服务器的链表记录获得; ●可以和别的客户端聊天,发数据采用“用户名后面加数据”方式; 1.6日志文件 属性:任选 描述:服务端通过一个日志文件记录所有客户端连接、命令执行、断开信息(时间,IP地址,执行的命令,心跳包超时等)。 例如:“客户端连接时间 客户端IP地址 客户端的命令 数据包类型(就是上面1.6的data_type) 客户端发送的信息 ”。 2.对性能的规定 本系统在设计方面本着方便、实用的宗旨,性能方面应遵循如下原则: ●执行效率(时间): 软件运行应该尽量高效;避免没有必要的循环处理、重复处理; ●资源损耗(空间):设计尽量节约资源(内存、数组、链表等);不用的资源要及时释放; ●初始化: 变量、数组、内存块、链表节点(其next要置NULL)等都要初始化; ●健壮性:不能出现野指针、内存泄露、数组越界访问等等: ◎申请内存之后,应该立即检查指针值是否为NULL;动态内存的申请与释放必须配对,防止内存泄漏。释放了内存之后,立即将指针设置为NULL,防止产生“野指针”; ◎函数的入参必须进行有效性判断;用户输入、函数返回值(如果用到的话)都要判断; ◎switch-case一定要有default;if-else if等后要有else,除非if满足后返回或退出; ◎数组的下标不要发生“多1”或者“少1”操作。 3.对排版的规定 ●缩进要对齐; ●长行拆分; ●二元操作符的前后应当加空格,包括如下操作符: 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"="、"+=" ">="、"<="、"+"、"*"、"%"、"&&"、"||"、"<<", "^" 等; ●空行: ◎结构体 声明之后、每个函数定义结束之后都要加1行空行; ◎逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔; ◎一行代码只做一件事情; ◎"if"、"for"、"while"、"do"等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 "{ }"; 4.对可维护性的规定 对可维护性的最终要求:别人能够轻松上手你的代码。 ●结构清晰: ◎模块化:对界面(显示)、菜单管理、逻辑管理、文件操作等等代码要独立,必须多个.java文件; ◎封装:一个函数只做一件事,函数功能要单一;一个函数不能超过50行; 避免重复、冗余代码; ◎代码块清晰。 ●变量命名规范,变量名应该具有自明性: ◎常量,枚举和宏定义命名 常量名,宏和枚举值由全大写字母组成,单词间通过下划线来界定; ◎函数的命名: 使用"动词"或者"动词+名词"(动宾词组)的形式,由一个或多个单词组成且以小写字母开头,以后每个单词的首字母必须大写 ◎变量的命名与定义 应当使用"名词"或者"形容词+名词",由一个或多个单词组成且以小写字母开头,以后每个单词之间用下划线隔开。 ●注释充分:变量、函数(包括参数、返回值)、代码功能块、一些复杂算法……等都需要 清晰明了地说明; 5.对个性的规定 把项目做出个性出来。下列各项中有和比人不同之处、或很有创意,即可认为有个性。独立设计的软件,一般都会出现一些个性。参考、抄袭不会出现个性。 ●设计思路:包括软件的整体架构、功能块的设计思路、函数封装等等; ●功能实现:从用户的角度,使用上发现与众不同的地方; ●其它方面;
Package继承层次(求代码C#)
一些快递商,如FedEx、DHL和UPS,都提供多样化的服务,同时也收取不同的费用。创建一个表示各种不同包裹的继承层次。以包裹类Package作为基类,两日包裹类TwoDayPackage和连夜包裹类OvernightPackage作为派生类。基类Package应该包括含代表寄件人和收件人姓名、地址、所在城市、所在州和邮政编码等的数据成员。此外,还应包含存储包裹重量(以盎司计)和每盎司费用的数据成员。类的构造函数应初始化这些数据成员,并确保重量和每盎司费用为正值。Package应该提供public成员函数calculateCost,该函数计算重量和每盎司费用的乘积,得到的是与运输该包裹有关的费用并返回(返回值类型为double)。派生类TwoDayPackage应继承基类Package的功能,但还应包含一个数据成员,表示付给两日快递服务的平寄费。TwoDayPackage构造函数应接受一个值来初始化这个数据成员。类TwoDayPackage还应该重新定义基类的成员函数calculateCost来计算运输费用,具体方法是将平寄费加上由基类Package的calculateCost函数计算得到的基于重量的费用中。派生类OvernightPackage应直接继承基类,并且应包含一个附加的数据成员,表示付给连夜服务的每盎司的额外费用。类OvernightPackage应当重新定义基类的成员函数calculateCost,来使它在计算运输费用之前,先将额外的每盎司费用加到标准的每盎司费用上。编写测试程序,创建每种Package 的对象并测试成员函数calculateCost。
多人聊天器,求大神发源代码!初来乍到,小弟实在不是很懂,望大神指教!在线等大神!
1. 对功能的规定 分必选项和任选项,其中,必选项是必须完成的,属于项目答辩的入口条件,所有人都要做,未完成者取消答辩资格; 任选项不是入口条件,但每完成一项都会加分,对于完成了必选项的同学,尽可能地多完成一些任选项,以期获得更高的答辩成绩。 如果所有项(包括必选和任选)都完成,那么功能分就是满分。 如果设计思路、界面效果、代码组织等方面有个性(或和别人的不同),则获得附加分。 1.1 服务器功能 1.1.1配置文件 属性:任选 描述:服务器的配置从配置文件中获取,内容包括服务器地址(服务器IP 和 port),具体格式如下: SERVER_IP = 192.168.1.11 PORT = 12012 注意:具体IP和port以本地为准 1.1.2账户文件 属性:必选 描述:客户端注册的用户名和密码需要服务器保存。必须完成下列所有情况: ●内容为用户名和用户密码列表; ●必须用文本形式; ●用户注册用户名重复,需要提示重新选择用户名 ●用户登录时用户名重复,需要提示重新选择用户名 ●用户名密码输入错误,应该提示。给3次连续错误机会,超过3次退出。 1.1.3支持多客户端 属性:必选 描述:基于tcp协议的客户端服务器通讯,服务器采用多线程支持多个客户端连接。 1.1.4业务功能 属性:必选 描述:群聊,单聊 1.1.5链表记录会话连接 属性:必选 描述:服务端使用链表记录当前客户端的会话连接,多个线程访问同一个链表,采用互斥锁来控制。 链表包含下列信息:客户端的ip地址、连接时间,用户名。 1.1.6链表记录动态维护 属性:任选 描述:服务端能够动态维护链表记录;服务器有命令供查询显示。 1.1 客户端功能 1.2.1注册 属性:必选 描述:客户端提供注册用户名,密码功能,用户名密码通过网络传输到服务器认证(用户名不可重复),认证通过后写入账户文件。 1.2.2登陆(认证) 属性:必选 描述:服务器和客户端增加用户密码登陆机制,包含如下流程: ●客户端把接受的用户名密码发送至服务器; ●服务器启动后从配置文件中读取用户信息形成数据表,根据此来验证密码。验证后返回认证结果给客户端(不可一个用户名同时登录) ●如果认证正确,服务器开始接受客户端的命令;认证错误重新认证(3次登陆错误退出) 1.3心跳机制 属性:必选 描述:客户端与服务端之间使用心跳机制,必须完成下列所有情况: ●客户端定时向服务端发送一个数据包(心跳包,内容不限,3秒间隔),证明自己活着; ●服务端显示来自某个IP地址客户端的心跳包; 1.4心跳异常 属性:任选 描述:服务器超过一定的时间没有收到客户端的心跳包(3秒间隔),连续5个包没有接收到则说明客户端出现问题,必须做出如下的处理: ●记录状况; ●断开连接; 1.5聊天功能 属性:必选 描述:两客户端之间能够直接文字通信(类似于QQ聊天), ●能够查询在线列表,具体信息从服务器的链表记录获得; ●可以和别的客户端聊天,发数据采用“用户名后面加数据”方式; 1.6日志文件 属性:任选 描述:服务端通过一个日志文件记录所有客户端连接、命令执行、断开信息(时间,IP地址,执行的命令,心跳包超时等)。 例如:“客户端连接时间 客户端IP地址 客户端的命令 数据包类型(就是上面1.6的data_type) 客户端发送的信息 ”。 2.对性能的规定 本系统在设计方面本着方便、实用的宗旨,性能方面应遵循如下原则: ●执行效率(时间): 软件运行应该尽量高效;避免没有必要的循环处理、重复处理; ●资源损耗(空间):设计尽量节约资源(内存、数组、链表等);不用的资源要及时释放; ●初始化: 变量、数组、内存块、链表节点(其next要置NULL)等都要初始化; ●健壮性:不能出现野指针、内存泄露、数组越界访问等等: ◎申请内存之后,应该立即检查指针值是否为NULL;动态内存的申请与释放必须配对,防止内存泄漏。释放了内存之后,立即将指针设置为NULL,防止产生“野指针”; ◎函数的入参必须进行有效性判断;用户输入、函数返回值(如果用到的话)都要判断; ◎switch-case一定要有default;if-else if等后要有else,除非if满足后返回或退出; ◎数组的下标不要发生“多1”或者“少1”操作。 3.对排版的规定 ●缩进要对齐; ●长行拆分; ●二元操作符的前后应当加空格,包括如下操作符: 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"="、"+=" ">="、"<="、"+"、"*"、"%"、"&&"、"||"、"<<", "^" 等; ●空行: ◎结构体 声明之后、每个函数定义结束之后都要加1行空行; ◎逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔; ◎一行代码只做一件事情; ◎"if"、"for"、"while"、"do"等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 "{ }"; 4.对可维护性的规定 对可维护性的最终要求:别人能够轻松上手你的代码。 ●结构清晰: ◎模块化:对界面(显示)、菜单管理、逻辑管理、文件操作等等代码要独立,必须多个.java文件; ◎封装:一个函数只做一件事,函数功能要单一;一个函数不能超过50行; 避免重复、冗余代码; ◎代码块清晰。 ●变量命名规范,变量名应该具有自明性: ◎常量,枚举和宏定义命名 常量名,宏和枚举值由全大写字母组成,单词间通过下划线来界定; ◎函数的命名: 使用"动词"或者"动词+名词"(动宾词组)的形式,由一个或多个单词组成且以小写字母开头,以后每个单词的首字母必须大写 ◎变量的命名与定义 应当使用"名词"或者"形容词+名词",由一个或多个单词组成且以小写字母开头,以后每个单词之间用下划线隔开。 ●注释充分:变量、函数(包括参数、返回值)、代码功能块、一些复杂算法……等都需要 清晰明了地说明; 5.对个性的规定 把项目做出个性出来。下列各项中有和比人不同之处、或很有创意,即可认为有个性。独立设计的软件,一般都会出现一些个性。参考、抄袭不会出现个性。 ●设计思路:包括软件的整体架构、功能块的设计思路、函数封装等等; ●功能实现:从用户的角度,使用上发现与众不同的地方; ●其它方面;
dll工程添加json.lib出错
dll工程中添加了a.h以及a.cpp,实现一些导出类以及导出函数的相关功能,我要使用json协议,代码如下: a.cpp如下:#include "StdAfx.h" #include "Date.h" #include <json/json.h> #include <string> using namespace std; #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif Date::Date(void) { day=0; month=0; year=0; } Date::~Date(void) { } void Date::SetDay(int num) { day=num; } void Date::SetMonth(int num) { month=num; } void Date::SetYear(int num) { year=num; } int Date::GetDay() { return day; } int Date::GetMonth() { return month; } int Date::GetYear() { return year; } CString Date::GetDate() { CString date; date.Format(_T("%d年%d月%d日"),year,month,day); return date; } int Max(int a,int b) { return a>b?a:b; } int GetPCTOOLUseCount(const char* pctoolIdentity)//pctoolIdentity客户端传递过来的参数,函数返回值为客户端使用次数 { return 1;此处省略。。。} 工程属性配置有:配置属性-》常规-》配置类型:动态库(.dll) MFC的使用:在共享DLL中使用MFC;VC ++目录:包含目录$(MSBuildProjectDirectory)\include;$(IncludePath),这里include文件夹里面存放的是json文件夹,有用的.h文件;VC++-》库目录$(MSBuildProjectDirectory)\lib\debug;$(LibraryPath)工程目录下的lib文件夹下的debug文件夹里面存放的是json.lib; C/C++C->运行库4种方式都试过,都不行。 链接器-》输入-》附加依赖项:json.lib 生成的错误: 1> 正在删除文件“Debug\TestDll.lastbuildstate”。 1>InitializeBuildStatus: 1> 正在对“Debug\TestDll.unsuccessfulbuild”执行 Touch 任务。 1>ClCompile: 1> stdafx.cpp 1>d:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxver_.h(81): fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds 1> 1>生成失败。 1> 1>已用时间 00:00:00.46 ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ========== 而我在非dll工程中用同样的方法是没有任何问题的,
求各位大神不吝源代码呀
程序要求: 1. 项目名称:基于JSP的公告系统 2. 功能说明: 1) 提供基于数据库的用户认证:只有正确的登录后才发布,编辑,删除公告; 2) 提供用户注册页面,可以注册新的用户; 3) 登录后可以对通过web页面对公告的增、删、查(按公告的ID)、改,公告存储必须包含ID、标题、内容、发布时间、发布人五个字段; 3. 技术要求: 1) 运行环境jdk8+tomcat8+mysql5 2) 开发技术:JSP +Servlet +JavaBean(可使用开源框架) 评分标准: 1. 基本功能60分: 1) 用户认证:10分 2) 用户注册:10分 3) 公告增删查改:40分 2. 界面开发20分 1) 使用CSS技术:10分 2) 使用JavaScript技术:10分 3. 附加分20分,加分项 1) 使用MVC框架 2) 增加新的功能,如支持图片内容、文件上传、公告删除回收站、分页显示、权限过滤(登陆验证)、登录验证码、公告发布审核、MD5加密等。
Spring+Hibernate多表关联的问题
1.多表关联配置了相关many-to-many 并且在pojo里写了Set 为什么每次添加中间表里都没有数据? 2.是不是添加的控制器如果用spring的simpleFormController继承的话 关联的时候一些外键没法格式化? 因此造成中间表里没有数据? 3.如果中间表里还需要附加其他字段 该怎么办? 比如 student---sid,sname teacher---tid,tname course----sid,tid 我在student的form中有一项是teacher的列表select 在student和teacher的pojo里都有Set对方的代码 添加时用的controller是继承自simpleFormController(其中有一项commandclass我设为了student的pojo) 使用一个共用的DAO,代码段为: [code="java"] ...handleRequest(...request,..response,Command cmd,...)... Student student = (Student)cmd; CommonDAO.saveOrUpdate(student);//如果要添加成功,是否需要在此处加上插入course的语句?问题是,该怎么加,因为teacher的id也包含在cmd里边了吧 [/code] 现在student能进库而course依然为空,为何? [b]问题补充:[/b] 关键之处在于和spring整合 没有人遇到过这个问题吗?
C++在windows平台下利用thrift通信
在windows下使用C++和Thrift开发客户端程序与HBase进行通信,总是实现不了。 已经安装了thrift所依赖的boost,libevent,openssl底层东西,也成功编译出了libthrift.lib和libthriftnb.lib两个lib库。 客户端程序添加引用如下: 1.在C++/常规/附加包含目录中添加对头文件的引用:C:\openssl\include;C:\libevent\include;C:\boost\include;E:\HBase\thrift-0.9.3\lib\cpp\src;E:\HBase\thrift-0.9.3\lib\cpp\src\thrift。 2.在链接器/常规/附加库目录中添加库文件目录:C:\openssl\out32dll;C:\libevent\libs;C:\boost\libs;E:\HBase\thrift-0.9.3\lib\cpp\Debug 3.在链接器/输入/附加依赖项中添加对libthrift.lib和libthriftnb.lib两个lib库的引用 但是在创建客户端引用的过程中总是报错: 错误 2 error LNK2019: 无法解析的外部符号 "public: void __thiscall apache::thrift::TOutput::perror(char const *,int)" (?perror@TOutput@thrift@apache@@QAEXPBDH@Z),该符号在函数 "protected: void __thiscall apache::thrift::transport::TSocket::openConnection(struct addrinfo *)" (?openConnection@TSocket@transport@thrift@apache@@IAEXPAUaddrinfo@@@Z) 中被引用 E:\HBase\thrift-0.9.3\lib\cpp\CppDemo\libthrift.lib(TSocket.obj) CppDemo 错误 3 error LNK2019: 无法解析的外部符号 "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl apache::thrift::TOutput::strerror_s(int)" (?strerror_s@TOutput@thrift@apache@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z),该符号在函数 "public: __thiscall apache::thrift::transport::TTransportException::TTransportException(enum apache::thrift::transport::TTransportException::TTransportExceptionType,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??0TTransportException@transport@thrift@apache@@QAE@W4TTransportExceptionType@0123@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 中被引用 E:\HBase\thrift-0.9.3\lib\cpp\CppDemo\libthrift.lib(TSocket.obj) CppDemo 程序代码如下: #include "stdafx.h" #include<thrift/protocol/TProtocol.h> #include <thrift/transport/TSocket.h> #include <thrift/protocol/TBinaryProtocol.h> #include <thrift/server/TSimpleServer.h> #include <thrift/transport/TServerSocket.h> #include <thrift/transport/TBufferTransports.h> using namespace std; using namespace ::apache::thrift; using namespace ::apache::thrift::protocol; using namespace ::apache::thrift::transport; using namespace ::apache::thrift::server; using boost::shared_ptr; int _tmain(int argc, _TCHAR* argv[]) { boost::shared_ptr<TTransport> socket(new TSocket("127.0.0.1", 9090)); return 0; } 各位大神,可有办法?急...
请问微信支付支付成功后如何获取所谓notify的返回值
情况其实不复杂,就是有一个地方一直没搞明白。我已经按照demo构成好了xml包,顺利的换取到了prepal_id,也通过js的那个接口,顺利的能弹出输入密码的对话框,也能输入密码并且钱也到了我的账户上来,都OK。 但一直困扰我的是这个:$input->SetNotify_url("http://www.xxxx.com/index.php/aaa/bbb");这一行似乎一直不起作用。因为在调用了获取prepal_id的unifiedOrder接口后,返回的数据已经不包含这个参数了。而在付完钱也弹出相应的官方的账单页面后,我发现bbb函数压根没有执行(已经提前在bbb函数中写了一段创建文件的代码,但未有新文件生成)。 其他教程基本都教到掉用JS接口弹出输入框就结束了,后面附加一句,当交易成功中,通知接口会收到一份XML文档(含有transaction_id等参数),可以用GET方法获取。所谓通知接口应该就是我们事先设置好的notify_url没跑了。但这个notify_url在文档的解释是异步处理,那理论上不需要我们另外调用,我试过另行跳转,但无法GET到相关信息。 那么不主动跳转的话,这个异步动作是在什么时候执行的呢?我要如何GET到transaction_id等参数,在收到钱的同时做些别的事情呢(给买家派发短信等)?
C语言对用堆导入并显示的数据进行进一步的处理
原题目:求转录RNA组的平均值与标准差(英文翻译过来的) 附加条件:给了一个200多M的文件(数据,可以以txt,csv等形式打开 ) 拿到题目以后解读数据就费了好长时间,数据中的名称全是英文,看了好半天才明白是怎么一回事想到定义数组发现定不了那么大,从网上学了malloc可是完全不知道引入文件后怎么将其导入数组内,试着将网上的程序拼接结果不行。////这时得到了堆空间这个名词,紧接着直接搜出了导入csv文件的相关代码(这里解释一下,这是大学老师布置的一道题,老师只教了我们谭浩强的红皮书就出这样的题目。。。老师也跟我们说了考验我们获取信息的能力。。。只是交作业不算抄袭吧?),就直接粘上了,然后逐行的读懂了这个程序,能够很顺利的用运行显示出所有数据,但是我想进一步做的时候发现自己需要将没一行数据单独进行运算,而这个程序是检测后直接一个个的将一整行显示了,所以我不知道该怎么进行下一步的数据处理。(其实这个程序的核心部分我也只是知道单独行的意思,整体的功能实现并不是太确定)求哪位好心人帮忙给讲一下怎么对导入的数据进行处理。自己的水平实在是不够了。 谢谢了。 #include <stdio.h> #include <stdlib.h> #include <string.h> int getFilelen(FILE * file)//2.2.0----getfile...函数---- 主要是做逐行读取功能并记录行数 { int len = 0;//2.2.1---定义了一个len=0其意义暂时不知---- if (file == NULL) { return -1;//2.2.2如果文件为空(或不存在??????????)直接结束 } char buf[1024];//2.2.3定义一个大小为1024的一维数组(1024有无特殊含义???????) //读取每一行 while (fgets(buf, 1024, file) != NULL)//2.2.4---- 将fp中的内容按1024字节大小读入text中,然后输出。直到读到fp的末尾,为空了。停止读取,然后关闭文件。 -----解释了1024的问题 { len++; //printf("%d ",len); } //设置光标 fseek(file, 0, SEEK_SET);//2.2.5---函数。。。跳到 ---错了。。。 意思是把文件指针指向文件的开头 return len;//2.2.6----返回len----此时回到77行继续运行程序 } void readFileData(FILE * file, int len, char ** pArray) //2.3.1文件指针 长度 堆区数组----read为函数名的函数,其意义因该为读取吧 ---读取到数组??? { if (file == NULL || len <= 0 || pArray == NULL)//2.3.2--如果存在什么不合理的情况,直接结束 { return; } char buf[1024]; //读取每一行 int index = 0; while (fgets(buf, 1024, file) != NULL)//同14行 { int currentlen = strlen(buf) + 1;//strlen() 这个函数是返回一个字符串中的字符个数,不包括结束符 '\0'; char * currenP = (char *)malloc(sizeof(char) * currentlen); strcpy(currenP, buf);//复制BUF ,buf包含整个数据库?? pArray[index++] = currenP;//将buf放进数组??? // printf("%d ",pArray[index++] ); memset(buf, 0, 1024);// 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值----转换为ascii之后方便计算?---- }//回79行 } void showFileData(char ** pArray, int len)//以show为开头的函数,其意义因该为展示,显示吧----- { for (int i = 0; i < len; i++) { int qwe=i; printf("第%d行内容:%s\n", i+1, pArray[i]);//证实parray实际上包含了数据库 // printf("第%d行数据:%s\n",i+1,pArray[qwe+1]); } }//回80行 void freeSpace(char ** pArray, int len)//不用想了,释放空间,翻译一下就出来了 { if (pArray == NULL || len == NULL) { return; } for (int i = 0; i < len; i++) { if (pArray[i] != NULL) { free(pArray[i]); pArray[i] = NULL; } } }//回81行 int test01()//2.1.0----test01函数,整个程序的主体部分(之后的\n和system只是辅助,显示的好看一些,没有什么意义) -----此函数意义仍为一个目录,具体操作在其他函数中 { FILE * file = fopen("transcript_rna_tissue.csv", "r");//2.1.1打开文件,如果不存在或者打不开的话输出72内容,结束程序。 if (file == NULL) { printf("打开文件失败!\n"); return 0; } int len= getFilelen(file);//2.1.2----定义(调用)函数get...-----程序跳转至第5行 char ** pArray = (char **)malloc(sizeof(char *) * len);//2.2.0---定义一个符合文件大小要求的堆空间????? readFileData(file, len, pArray);//2.3.0---函数,跳到25行 -----------去掉这一行数据显示为 第i行数据:(null) showFileData(pArray, len);//到45行 ----------去掉程序不再运行 freeSpace(pArray, len);//到52行 -----可以去掉,不影响显示 pArray = NULL;//将PARRAY定回空----回87行 } int main()//1.0.0--定义主函数,程序的真正开端 { test01();//2.0.0--调用函数 test01-----程序跳转到第67行 putchar('\n'); system("pause"); }//结束
无法解析的外部命令。。求解答
代码如下,xxx.h是另一个工程的一个头文件,已经在附加依赖项包含了lib文件,不知道为什么这样,求大神指教! ``` #include "xxx.h" #include <iostream> //using namespace std; using namespace xxx; int main() { std::cout << xxx("abc",true); system("pause"); } ``` 错误 LNK2001 无法解析的外部符号 "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl xxx::xxx(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?xxx@xxx@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV23@_N@Z) wbtest D:\cygwin64\home\trunk1206\xxx\xxx\xxx\xxx\xxx.obj 1
能有大佬帮我看一下这段代码问题在哪吗
总是会出现/clang:-1: linker command failed with exit code 1 (use -v to see invocation) ```cpp #include <iostream> using namespace std; template <class T> struct DblNode{//链表结点类定义 T data;//链表结点数据 DblNode<T> *lLink,*rLink;//链表前驱后继指针 DblNode(DblNode<T> *left=NULL,DblNode<T> *right=NULL){ lLink=left; rLink=right; }//构造函数赋予初值,适用于后面调用时候实参两个 DblNode(T value,DblNode<T> *left=NULL,DblNode<T> *right=NULL){ data=value; lLink=left; rLink=right; }//构造函数赋予初值,适用于后面调用时候实参两个 }; /* template <class T> class LinearList { public: LinearList();//定义构造函数(在这里可有可无) ~LinearList();//定义析构函数(清理垃圾) //virtual提供子类继承并将其实现。 virtual DblNode<T>Search(const T&x)const=0;//const表明它不能改变操作它的对象的数据成员,且自身不能调用非const成员 virtual DblNode<T>Locate(int i,int d)const=0;//在表中定位第i个元素的位置 virtual bool Insert(int i,const T&x,int d)=0;//在第i个表项后插入x virtual bool Remove(int i,T&x,int d)=0;//删除第i个表项,通过x返回 }; */ // template <class T> class DblList{//继承的关系 public: DblList();//构造函数,建立附加头结点 DblList(T data); ~DblList();//析构函数,清理垃圾 void setHead(DblNode<T> *ptr){first=ptr;} DblNode<T>*Search(const T&x);//在链表中按后继方向寻找等于给定植x的结点 bool Insert(int i,const T&x,int d);//在链表中第i个结点插入一个包含x的新结点,d=0按前驱方向,d!=0按后继方向 bool Remove(int i,T&x,int d);//在链表中删除第i个结点,x为返回值,d=0按前驱方向,d!=0按后继方向 DblNode<T>*Locate(int i,int d);//在链表中定位序号为i的结点,d=0按前驱方向,d!=0按后继方向 private: DblNode<T> *first;//定义first }; // template <class T> DblList<T>::DblList(T uniqueVal){ first=new DblNode<T>[uniqueVal]; if(first==NULL){ cerr<<"存储分配错误"<<endl; exit(1); } first->rLink=first->lLink=first; } // // template <class T> DblNode<T> *DblList<T>::Search(const T&x){ DblNode<T>*current=first->rLink;//定义一个当前指针类结点,并指向下一个结点。 while(current !=first&&current->data!=x){ current=current->rLink;//如果当前结点不是第一个且当前结点指向的数据不是x,current就指向下一个。 }//如果没找到,current最终会通过附加头结点指向first并退出当前的循环 if(current!=first)//找到了,说明current并没有回到first return current; else return NULL; }; // // template<class T> DblNode<T>*DblList<T>::Locate(int i,int d){ if(first->rLink==first||i==0)//表头结点其实就是第0个结点,当i等于0时返回first即可 return first; DblNode<T> *current; if(d==0) current=first->lLink;//d=0时往前驱方向走 else current=first->rLink; for(int j=1;j<i;j++){ if (current==first) break;//在有些数据下,i的数值可能会大于链表的长度,这时我们需要退出。 else if(d==0) current=current->lLink;//往前驱方向走 else current=current->rLink;//往后继方向走 } if(current!=first) return current; else return NULL; } // // template <class T> bool DblList<T>::Insert(int i, const T&x, int d){ DblNode<T>*current=Locate(i,d);//首先我们需要查找第i个结点 if(current==NULL) return false;//输入的i值不合理,不可能插入 DblNode<T>*newNode=new DblNode<T>(x);//定义一个新的结点指针,并将x存储在newNode里面。 if(newNode==NULL){ cerr<<"存储分配失败"<<endl; exit(1);//程序异常,强行退出程序 } if(d==0){//前驱方向上插入 newNode->lLink=current->lLink; current->lLink=newNode; newNode->lLink->rLink=newNode; newNode->rLink=current; } else{ newNode->rLink=current->rLink; current->rLink=newNode; newNode->rLink->lLink=newNode; newNode->lLink=current; } return true; }; // // template <class T> bool DblList<T>::Remove(int i,T&x,int d) { DblNode<T>*current=Locate(i,d);//定位第i个结点 if(current==NULL) return false;//输入的i值不合理,不可能删除 current->rLink->lLink=current->lLink;//从lLink中摘下 current->lLink->rLink=current->rLink;//从rLink中摘下 x=current->data;//删除的值赋值给x delete current;//删除 return true; }; // template <class T> void xunhuan(DblList<T>& x,int n,int m){ DblNode<T> *p=x.Locate(1,0),*pre=NULL; for (int i=0;i<n-1;i++) for(int j=1;j<m;j++){ pre=p; p=p->rLink; } } int main(){ int n; cin>>n; DblList<int> x; for(int i=0;i<n;i++) for(int j=0;j<2*n;i++) x.Insert(i,j,0); return 0; } ```
求大神指导双向循环链表问题【0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突】
小弟欲新建一双向循环链表,对链表中符合删除条件的数据进行删除操作。整个程序编译无bug,运行中断。主函数运行到新建链表后打印函数中的cout<<pn->data<<" ";VS2010显示的错误为“0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突”,求大神指教,是否是我新建链表的函数或宏定义中new和delete函数使用错误,还是我新建双向循环链表的算法有问题啊,望不吝赐教!!! 以下是部分代码,包含新建函数和打印函数: #include<iostream> #define CreateNode(x) x = new BLPtr #define DeleteNode(x) delete []x using namespace std; struct BLPtr { char data; struct BLPtr *prior; struct BLPtr *next; }; struct BLPtr *creat(void); void print(struct BLPtr *p); bool beErased(char); //struct BLPtr erase(struct BLPtr *p); int erase(struct BLPtr *p); int main() { struct BLPtr *p; p = creat(); cout<<"原始链表数据为:"<<endl; print(p); erase(p); cout<<"处理后链表数据为:"<<endl; print(p); return 0; } struct BLPtr *creat(void) {//建立一个无附加头结点的双向循环链表 struct BLPtr *head,*p1,*p2; head = p1 = CreateNode(p2);//新建第一个结点 cout<<"请输入第一个结点数据:"; cin>>p2->data;//输入第一个结点数据 while(p2->data != '#')//输入“#”结束 { p2->prior = p1;//后方前驱指针指向前方结点 p1->next = p2;//前方后继指针指向后方结点 CreateNode(p2);//新建结点 cout<<"请继续输入:"; cin>>p2->data;//输入新节点数据 } head->prior = p1;//头结点前驱指针指向尾结点 p1->next = head;//尾结点后继指针指向头结点 head = p2;//删除最后无用结点和指针 DeleteNode(p2); return p1; } void print(struct BLPtr *p) { struct BLPtr *pn; pn = p->next; while(pn != p)//输出除p以外的结点数据 { cout<<pn->data<<" ";//运行中断,求指教 pn = pn->next;//沿next向下搜索 } cout<<pn->data<<endl;//输出最后一个结点数据 }
透明动画 怎消除前一个动画?
看着书打代码,人物的上一个动画不会消失?(假设方块是人物) ![图片说明](https://img-ask.csdn.net/upload/201708/01/1501579550_29428.png) ![图片说明](https://img-ask.csdn.net/upload/201708/01/1501579562_28390.png) //我的框架 //----------------------------------------【头文件部分】------------------------------------------------ //描述:程序依赖的头文件 1 //------------------------------------------------------------------------------------------------------ #include<Windows.h> #include<tchar.h> #pragma comment(lib,"Msimg32.lib") //----------------------------------------【宏定义部分】------------------------------------------------ //描述:定义一些辅助的宏 1 //------------------------------------------------------------------------------------------------------ #define WINDOW_WIDTH 800//窗口的宽度 #define WINDOW_HEIGHT 600//窗口的高度 #define WINDOW_TITLE L"ForMyLoverForever"//窗口标题的定义 //-------------------------------------【全局变量声明部分】--------------------------------------------- //描述:全局变量的声明 1 //------------------------------------------------------------------------------------------------------ HDC g_hdc = NULL, g_mdc = NULL, g_bufdc = NULL;//全局设备环境句柄 HBITMAP g_hSprite = NULL, g_hBackGround = NULL;//一个存人物,一个存背景 int g_iNum = 0, g_iX = 0, g_iY = 0;//g_Num变量用来记录目前显示的图号,XY记录贴图的横纵坐标 DWORD g_tPre = 0, g_tNow = 0;//声明两个变量来记录时间,g_tPre为上一次绘制的时间,g_tNow为此次准备绘制的时间 //-------------------------------------【全局函数声明部分】--------------------------------------------- //描述:全局函数的声明部分,防止“未申明的标示”错误 1 //------------------------------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);//窗口过程函数 BOOL Game_Init(HWND hwnd);//在此函数中进行资源初始化 VOID Game_Paint(HWND hwnd);//在此函数中进行绘图代码的书写 BOOL Game_CleanUp(HWND hwnd);//在此函数中进行资源的清理 //---------------------------------------【WinMain()函数】---------------------------------------------- //描述:Windows应用程序的入口,类似main 1 //------------------------------------------------------------------------------------------------------ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //【1】设计一个完整的窗口类 WNDCLASSEX wndClass = { 0 };//用WINDCLASSEX定义一个窗口类 wndClass.cbSize = sizeof(WNDCLASSEX);//设置结构体的字节数大小 wndClass.style = CS_HREDRAW | CS_VREDRAW;//设置窗口的样式 wndClass.lpfnWndProc = WndProc;//设置指向窗口过程函数的指针 wndClass.cbClsExtra = 0;//窗口类的附加内存,为0就好 wndClass.cbWndExtra = 0;//窗口的附加内存,为0就好 wndClass.hInstance = hInstance;//指定的包含窗口过程的程序的事例句柄 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);//加载自定义图标xxx wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);//指定窗口类的光标句柄 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//为hbrBackground指定一个灰色画刷句柄 wndClass.lpszMenuName = NULL;//用一个空终止字符串,指定菜单资源的名字 wndClass.lpszClassName = L"ForMyLove";//用一个以空终止的字符串,指定窗口类的名字 //【2】注册窗口类 if (!RegisterClassEx(&wndClass)) return -1; //【3】正式创建窗口 HWND hwnd = CreateWindow(L"ForMyLove", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL); //【4】窗口的移动、显示、更新 MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);//调整窗口显示时的位置,使它位于坐标(250,80)处 ShowWindow(hwnd, nCmdShow);//调用ShowWindow函数来显示窗口 UpdateWindow(hwnd);//对窗口进行更新 if (!Game_Init(hwnd)) { MessageBox(hwnd, L"failed", L"message", 0);//使用messagebox函数 创建一个消息窗口 return FALSE; } //【5】循环消息过程 MSG msg = { 0 };//定义并初始化msg while (msg.message != WM_QUIT)//使用while循环,如果消息不是WM_QUIT消息,就能继续循环 { if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))//查看应用程序消息队列,有消息时将队列中的消息派发出去 { TranslateMessage(&msg);//将虚拟键消息转换为字符的消息 DispatchMessage(&msg);//分发一个消息给窗口程序 } else { g_tNow = GetTickCount();//获得当前系统时间 if (g_tNow - g_tPre >= 100)//当此次循环运行与上次绘图相差0.1秒时再进行重绘 Game_Paint(hwnd); } } //【6】窗口程序的注销 UnregisterClass(L"ForMyLove", wndClass.hInstance);//程序准备结束,注销窗口 return 0; } //-------------------------------------【Game_Init()函数】-------------------------------------------------- //描述:初始化函数,进行一些简单的初始化 1 //---------------------------------------------------------------------------------------------------------- BOOL Game_Init(HWND hwnd) { HBITMAP bmp; g_hdc = GetDC(hwnd); g_mdc = CreateCompatibleDC(g_hdc); g_bufdc = CreateCompatibleDC(g_mdc); bmp = CreateCompatibleBitmap(g_hdc, WINDOW_WIDTH, WINDOW_HEIGHT);//建立一个和窗口兼容的空的位图对象 SelectObject(g_mdc, bmp); g_hSprite = (HBITMAP)LoadImage(NULL, L"3.bmp", IMAGE_BITMAP, 480, 108, LR_LOADFROMFILE); g_hBackGround = (HBITMAP)LoadImage(NULL, L"1.bmp", IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, LR_LOADFROMFILE); g_iX = 0; g_iY = 350; Game_Paint(hwnd); return TRUE; } //-------------------------------------【Game_Paint()函数】------------------------------------------------- //描述:绘制函数,在此函数中进行绘制操作 1 //---------------------------------------------------------------------------------------------------------- VOID Game_Paint(HWND hwnd) { //处理图号 if (g_iNum == 8)//图号是否超过最大,要是超过就定为0 g_iNum = 0; //根据图号来贴图 SelectObject(g_mdc, g_hBackGround);//选择位图 BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);//以目前窗口进行贴图 //在mdc中进行透明处理 SelectObject(g_bufdc, g_hSprite); TransparentBlt(g_mdc, g_iX, g_iY, 60, 108, g_bufdc, g_iNum * 60, 0, 60, 108, RGB(0, 0, 0));//透明色彩法 //将最后的画面显示在窗口中 BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY); g_tPre = GetTickCount();//记录此次绘图时间,供下次游戏循环中判断是否达到更新时间间隔 //图号自增 g_iNum++; g_iX += 10;//计算下次贴图的坐标 //如果超过窗口边缘 就把他-60 if (g_iX >= WINDOW_WIDTH) g_iX = -60; } //--------------------------------------【Game_CleanUp()函数】---------------------------------------------- //描述:资源清理函数,在此函数中进行退出前的资源清理工作 1 //---------------------------------------------------------------------------------------------------------- BOOL Game_CleanUp(HWND hwnd) { DeleteObject(g_hBackGround); DeleteObject(g_hSprite); DeleteDC(g_mdc); DeleteDC(g_bufdc); ReleaseDC(hwnd, g_hdc); return TRUE; } //---------------------------------------【WndProc()窗口过程函数】------------------------------------------ //描述:窗口的过程函数 1 //---------------------------------------------------------------------------------------------------------- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT paintStruct;//定义一个PAINTSTRUCT机构体来记录一些绘制信息 switch (message) { case WM_TIMER://定时器消息 Game_Paint(hwnd);//调用函数来绘图 break; case WM_PAINT://若是客户区重绘消息 g_hdc = BeginPaint(hwnd, &paintStruct);//指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到paintStruct结构体中 Game_Paint(hwnd); EndPaint(hwnd, &paintStruct);//EndPaint函数标记指定窗口的绘画过程结束 ValidateRect(hwnd, NULL);//更新客户区的显示 break; case WM_KEYDOWN://若是键盘按下的消息 if (wParam == VK_ESCAPE)//按下的键是ESC DestroyWindow(hwnd);//销毁窗口,发送一条WM_DESTROY的消息 break; case WM_DESTROY: Game_CleanUp(hwnd);//调用自定义的资源清理函数进行退出前的资源清理 PostQuitMessage(0);//向系统表明有个线程终止请求。用来响应WM_DESTROY消息 break; default://默认的,若与上述不符合的条件 return DefWindowProc(hwnd, message, wParam, lParam);//调用默认的窗口过程 } return 0;//正常退出 }//窗口过程函数
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问