by zxy,Java/C++编程交流群:168424095
(1)如何同时运行一个解决方案中的多个项目修改解决方案的属性,改单启动项目为多启动项目,同时将自己想要运行的项目的操作从无改为启动。
(2)调试release版本如何设置断点要想调试代码,需要了解符号文件。符号文件是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。在 Windows 系统中,符号文件以 .pdb 为扩展名。
设置生成PDB文件的方法:
1、右键选择工程单击属性。
2、链接器->调试,生成调试信息选择是(/DEBUG)。
3、C/C++->优化->优化选择禁用(/od)
1、在项目自动生成的stdafx.h文件中添加下面头文件
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
2、把下面的函数加到你初始化的地方,然后你就可以使用printf函数了
void InitConsoleWindow()
{
int nCrt = 0;
FILE* fp;
AllocConsole();
nCrt =_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
fp = _fdopen(nCrt, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
BOOL CXXXDlg::OnInitDialog()
{
CString str;
初始化函数中添加
……………………
InitConsoleWindow();
printf("str = %s\n ", "debug");
调用此函数后会弹出一个CONSOLE,然后printf的东西就会出现在上面。
(4) 如何不记忆ADO连接数据的长串很多新手记不住长长的连接字符串。同事告诉我一个方法不需要记忆它了。方法如下:
1.新建一个文本文件test.txt,改其扩展名为.udl格式的文件,得到test.udl文件。如下图:
2.双击打开,如图:
按照向导设置完成后点击确定按钮。
3.右键单击test.udl文件,选择用记事本打开。打开后即得到连接字符串:
(5) 如何切换VS2008 空格显示 绿点,Tab 显示箭头 两种方式方法一:通过菜单栏编辑----> 高级------>查看空白。
方法二:快捷键Ctrl+ r, ctrl + w, 切换空格示。
(6)VS2008如何显示行号工具->选项->文本编辑器->C/C++->常规->显示 勾上行号
(7)VS2008如何代码折叠工具(tools) -> 选项(Options) -> 文本编辑器(Text Editor) -> C/C++ -> 格式设置(Formatting)-> 勾上语句块的自动大纲显示(Automaticoutlining of statement blocks)。
1 首先,要实现一个简单的WIFI连接设置,我们需要掌握和WIFI功能相关的一些类,比如WIfiManager,WifiInfo,ScanResult,WifiConfiguration等,提供了WIFI连接相关的基本的API.
比如:
打开关闭网关:wifiManager.setWifiEnabled(true/false);
扫描周边网络:wifiManager.getScanResults();
连接指定网络:wifiManager.enableNetwork(networkId,true);
添加网络:wifiManager.addNetwork(wcg);
移除网络:wifiManager.removeNetwork(netId);
获取网卡状态:wifiManager.getWifiState()
……
2 扫描的网络将会被保存在一个List<ScanResult>中,同时WifiManager会为我们维护一个List<WifiConfiguration>,这个List中保存了我们已经连接过的配置好的网络连接.
当我们选择一个网络时,判断它是否存在于这个List中,存在即可直接连接,否则需要用户输入密码创建一个新的WifiConfiguration.
3 获得的ScanResult中将会保存有该无线连接的相关信息,包括SSID,BSSID,capabilities,level等属性,其中SSID号是该连接的一个标识符,比如我们经常看到的TP_LINKXXX.
capabilities中保存了相关加密信息,比如WEB和WPA等.level则表示信号度.
4 在获取连接状态时,即调用wifiManager.getWifiState()或者wifiInfo.getSupplicantState()时,通常在用户已经授权成功后,我们获得的状态值就为COMPLETED,此时不管网络是否已经连接成功,我们都无法获得新的状态. 所以要判断WIFI网络是否已经真的连接成功需要用到如下方法判断:
ConnectivityManager connManager = (ConnectivityManager) WifiConnection.this
.getSystemService(CONNECTIVITY_SERVICE);
// 获取代表联网状态的NetWorkInfo对象
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.getType() == 1
&& wifiAdmin.getWifiInfo().getSSID()!=null)
{
//WIFI网络连接成功
}
5 获取本地IP地址的方法:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
6 在创建一个新的WifiConfiguration时,切记SSID和preSharedKey必须添加双引号,否则必将会导致连接失败.正确写法如下:
//创建一个新的WifiConfiguration
WifiConfiguration wcg = new WifiConfiguration();
wcg.BSSID = mBSSID;
//SSID和preSharedKey必须添加双引号,否则将会导致连接失败
wcg.SSID = "\"" + mSSID + "\"";
wcg.hiddenSSID = false;
wcg.status = WifiConfiguration.Status.ENABLED;
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//如果加密模式为WEP
if(mSecurity.equals("WEP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wcg.wepKeys[0] ="\"" + editText.getText().toString() + "\""; //This is the WEP Password
wcg.wepTxKeyIndex = 0;
}
//如果加密模式为WPA EPA
else if(mSecurity.equals("WPA EAP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//如果加密模式为WPA PSK
else if(mSecurity.equals("WPA PSK"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//无加密
else
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
其他问题将会即使进行补充.
软件版本myeclispe8.0,自带tomcat6.0.13。
jdbc:mysql-connector-java-5.1.13-bin.jar
第一步:建立工程。
在Myeclipse中file->new->web project。
因为在测试数据源(jsp)时用到了标签库,所以可以在这里选上jsdl支持,当然也可以在工程建好后右键工程文件夹->myeclipse->add JSTL
Libraries…实现同样的功能。
第二步:导入jdbc的jar包。
要直接将mysql-connector-java-3.1.7-bin.jar复制到“工程文件夹/WebRoot/WEB-INF/lib”文件夹下。这时,myeclipse会自动生成一个
Referenced Libraries,不用管。
第三步:建立context.xml文件。
在“工程文件夹/WebRoot/META-INF”下,新建context.xml文件。文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context debug="5" reloadable="true">
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" />
</Context>
解释:
name="jdbc/mysql" //连接名,jndi中使用。具在JSP中用<sql:query var="rs" dataSource="jdbc/mysql">调用,servlet用 DataSource ds
= (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");调用。这里是tomcat的格式,不同的服务器可能有所不同。
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root" //mysql的用户名
password="" //mysql的用户密码,我这里是空
driverClassName="com.mysql.jdbc.Driver" //驱动类名,一般确定
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" //javatest是mysql中要使用的数据库名
第四步:修改web.xml文件。
在web.xml文件中添加以下内容: //重要一定添加进去
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这部分内容一般是确定的。
OK,现在可以测试数据源是否好了。下面是JSP测试文件:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/sql " prefix="sql" %>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/core " prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href=/blog_article/"<%=basePath%>">/index.html
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href=/blog_article/"styles.css">
-->
<sql:query var="rs" dataSource="jdbc/mysql">
select id, username, password from user
</sql:query>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
Foo ${row.username}<br/>
Bar ${row.password}<br/>
</c:forEach> <br>
</body>
</html>
当然,如果你用servlet测试数据源也是可以的,下面是一个servlet测试例子:
package fx;
import java.io.IOException;
import java.io.PrintWriter;
import java.s