.NET 3.5=.NET 2.0 Service Pack 2 with LINQ, C# 3.0, WCF 2.0, WPF 2.0, WF 2.0 and ASP.NET Ajax
.NET 3.5=.NET 2.0 Service Pack 2 with LINQ, C# 3.0, WCF 2.0, WPF 2.0, WF 2.0 and ASP.NET Ajax
ATMҪУ
ATMCCָClient˵װATM豸ϵ
ATMPPָƽ̨(Platform)װеģҪATMתȹ
ATMVVָView/Monitor2¥˵ĴATMPATMCȡ,ʵֶ豸Чʵʱء
ATMAAָAnalysisҵܶATMVʵֵIJݵATMA
Sandcastle Help File Buildervs2005xmlעɳ˵ĵĹкܷ㣬ǰֶʹ
NDoc,NDoc֧dotnet2.0˵ҪԱѾάdotnet2.0ǿʹ
microsoftSandcastledocumentSandcastleҪǻconsoleģе㸴ӣʺϳ
ѧʹãҺSandcastle Help File Builderͼλĵɹߣʹʹ˺ö
ʹSandcastle Help File BuilderһЩϸҪע⣺
1ʹSandcastle Help File Builder֮ǰҪȷѾװSandcastleHTML Help Workshop
2HTML Help Workshopİװ·dzĬϰװ·߾ΪԶ˰װ·
ʹSandcastle Help File BuilderʱһЩرwindows formĵʱ
3Sandcastle Help File Builder PathsѡµһЩã
HtmpHelp1xComplierPath, outputPath, SandcastlePath
עSandcastleHTML Help WorkshopSandcastle Help File Builderصַͨgoogleصַ
HTML Help WorkshopĬϰװ·ӦC:Program FilesHTML Help Workshop
ʹSandcastle Help File Builderʲôʣԡ߾
ǰпһ仰,ƿ˵Ǻܾ.
һάõϵͳӦѭԭ",նԭģŶԭչ
ϣλ,رǴƵ.͵,Ӧö仰.
,ϸƷƷ仰,dz!
ƣReflector.FileDisassembler ߣLutz Roeder °汾Reflector.FileDisassembler 4.1.85.0 ڣ 2005-10-23 |
飺 Reflector.FileDisassemblerһͷԷչʾܡReflector.FileDisassemblerͷԷЩͷɵ Microsoft м (MSIL)ȣ
ƣCodeSmith
ߣEric J. Smith
°汾CodeSmith 3.1
ڣ2005-8-11
飺 CodeSmith һֻģĴɹߣʹ ASP.NET ͵Ĵıɹ߲ͬCodeSmith Ҫ㶩ضӦóƻϵṹ CodeSmith ɰǿͼϺӦóڵκζ
ƣNDoc ߣSourceForge °汾NDoc 1.3.1 ڣ2005-1-25 飺 дĵϼһηNDoc ܹʹ÷ʹô C# XML עɵ XML ԶΪĵϣ°汾ṩ˸Ե֧֡ |
ƣNUnit ߣMichael C. Two, Charlie Poole °汾NUnit version 2.2.3 ڣ2005-11-15 飺 NUnit Ϊ .NET ɵĿԴ뵥ԪԿܡNUnit ʹϲԱдԣӶӦóضܡ |
ƣFxCop ߣMicrosoft °汾FxCop 1.32 ڣ2005-7-25 飺.NET ܷdzǿζпܴӦóҲͬڴʳĿܡFxCop ڴõӦóĹ֮һͨʹͬĹǷЩ |
ƣNAnt ߣGerry Shaw ,Ian MacLean,Scott °汾NAnt 0.85 (.net2.0beta) ڣ2005-04-18 飺NAnt һ .NET ɹߣʹΪĿɹ̱÷dzסNAnt ʹɽļ NUnit ԡ͵ʼȵȡ |
ƣGhostDoc ߣRoland Weigelt °汾GhostDoc 1.9.1 ڣ2005-11-20 飺GhostDoc һVisual Studio XML ĵע NDoc ԶɴᷳƵ |
ƣVault ߣsourcegear °汾Vault 3.1.5 ڣ2005-11-04 飺һ.netƽ̨ĿVSS汾ƹ߲XML Web ServicesΪͨЭ. |
ƣDragnet ߣsourcegear °汾Dragnet 1.0.5 ڣ2005-11-20 飺ourceGear Dragnet һٵĹߡ |
ע:ƪתhttp://blog.csdn.net/CQP/archive/2005/12/08/546761.aspx
ĿҪһ,Ҳ˵һߵĹ߰,visual studio2005һ,ӵԺúã,˺ö,ڻһͷˮ.
visual-styleĶ,ɱҪõdocking,dockingѡȴеԥ,ʹc#Լȥʵ,dotnetmagic,ѡʹdotnetbar?ʹc#Լȥʵһʼͱ,ʲôҪԼͷĻտʲô.ѡdotnetmagic?ĿǰʹdotnetmagicҪԼдöʵ,е鷳,ĵDZȽȫ,ĵdotnetmagicṩsamplesӦÿԺܿ.dotnetbar?dotnetbarǺuiƿؼ,ҵۺܸ,ĵеǷȱ,tutorialsҲһЩܶƵ,һЩdotnetbarṩsamples,һؼŵǷ״Ժܺ,ʹҪдĴܱȽ.
ۺϿ,ʹdotnetbar,ȻһЩʱȥоЩsamples.
ⷽϻ߿˵̳̫,Ҳûһ,ʱĻ,ԼʹõһЩд,ϣλѶཻ.
ȡBSTR
дCOMʱʹBSTR֪ͣBSTRʹõunicode룬һʹõ
ansi룬Ҫһת,ôתȷأ
ᳫʹWideCharToMultiByteзֶ0x00--0x80֮ݶת
0x80תʱͻ
ֽĿеһδժ¼ϣܶⷽ湤
ConvertBSTR2Char(BSTR bstr, char * pChar, int * pLen)
{
char szConverted[8192];
memset(szConverted, 0, sizeof(szConverted));
char szTmp[3];
memset(szTmp, 0, sizeof(szTmp));
int iLen = *(int*)& ((char*)bstr)[-4];
int iConverted = 0;
int iIsTwo = 0;
for(int i = 0; i < iLen; i ++)
{
if (bstr[i] >= 0x80 && bstr[i] < 256)
{
szConverted[iConverted ++] = (char)bstr[i];
}
else
{
iIsTwo = WideCharToMultiByte(CP_ACP,0,&bstr[i],1,(char *)
szTmp,3,NULL,NULL);
if(iIsTwo == 1){
szConverted[iConverted ++] = szTmp[0];
//AfxMessageBox("Ӣ");
}else{
szConverted[iConverted ++] = szTmp[0];
szConverted[iConverted ++] = szTmp[1];
//AfxMessageBox("");
}
}
}
*pLen = iConverted;
memcpy(pChar, szConverted, iConverted);
}
дȽϼʲٶע͡
windowsгԼָɱ
1windowsгԲ·
1win.ini
2ͨעעHKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Runµ
ַУԺչͨעȽϷ㣬Ϊdotnetƽ̨ƵxmlʽļʹiniøʽעIJȻѡϾwindowsµĺöͨעõġ
2ָɱ̿ͨϵͳ
CreateToolhelp32Snapshot(), Process32First(), OpenProcess(), TerminateProcess(), Process32Next()ȣ庯˵ԱĺMSDN˵ĵҪעǣʹǰ#include <tlhelp32.h> // for CreateToolhelp32Snapshot
3ͨһƬչvcʹ
char szFileName[100];
memset(szFileName, 0, sizeof(szFileName));
GetModuleFileName(NULL, szFileName, sizeof(szFileName));
AfxMessageBox(szFileName);
//
HKEY hKey = NULL;
long lErrorCode = -1;
// ÿԶ
hKey = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Windows\CurrentVersion\Run", NULL, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, "KillThread", 0, REG_SZ, (BYTE *)szFileName, strlen(szFileName));
}
//ϴʵ˶עĸģǸóܹʵwindowsУ
HANDLE hSnapShot = NULL;
char szThreadName[100];
memset(szThreadName, 0, sizeof(szThreadName));
// get the thread name
::GetDlgItemText(this->m_hWnd, IDC_EDIT_THREADNAME, szThreadName, sizeof(szThreadName));
AfxMessageBox(szThreadName);
//strcpy(szThreadName, "SimSIUXFS3.EXE");
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == NULL)
{
return;
}
//LONG nProcess = 0;
PROCESSENTRY32 prosInfo;
prosInfo.dwSize = sizeof(prosInfo);
BOOL bStatus = Process32First(hSnapShot, &prosInfo);
while (bStatus)
{
CString scTmp = prosInfo.szExeFile;
if(scTmp.Compare(szThreadName) == 0)
{
DWORD dwProcessID = prosInfo.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
::TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
bStatus = Process32Next(hSnapShot, &prosInfo);
}
ϴչͨkillָ̡
4ͨϴ룬ǿһ£һʵֶԵǰϵͳһͳƣټһЩܣɺwindowsԴһߣǿøóǷԶУҪȡԶУֻҪͨRegDeleteKeyɾӦעͿԡҲǵϹܣʹãʧΪһ㡣
ʹc/c++ַʱɱĻõַķַʾ,,һЩַǷǿɼ,ôʾ?һDzð˽ơʮơƵȸָıʾʽ,ûй̶ĸʽ,ݸ˰ú͵ǰı̹淶ѡ.Ҳעпܴڵ,Ĵ,ûʲô?
#include "stdafx.h"
#include <memory>
int main(int argc, char* argv[])
{
char szTmp[10];
memset(szTmp, 0, sizeof(szTmp));
memcpy(szTmp, "123/x00123", 7);
return 0;
}
ԭʵ:szTmpǰ(7)ֽڽиֵ,ǰͺֽڷֱ'1', '2', '3', 3ֽ(0ʼ)Ϊ0x00,Ĵ˳ͨô?
vc6뿴,ô?
error C2022: '291' : too big for character
ʲôԭ?ָô?
ԭַнʱ/x00123Ϊһַ,0x00123ʮƱʾ291,ô?ʵϿķ:
#include "stdafx.h"
#include <memory>
int main(int argc, char* argv[])
{
char szTmp[10];
memset(szTmp, 0, sizeof(szTmp));
memcpy(szTmp, "123/000123", 7);
return 0;
}
Ҫ䶯Dzð˽ʾ0x00,˳ͨ,Ϊʲô,ĵ.
ʹ microsoft visual C++д˿̫ܲעCalling Convention,ʹö̬(dll)̬(lib),ЩlibdlldzԲͬĿԱ,߳ԲͬĹ˾Ļܻһ,returnִԺȴͻȻĪ,³.ΪreturnԺ,debugеѶ,Ϊʲô?ָô?
ʵ,,Ӧüһproject setting,˶һproject setting--> c/c++ categoryеCalling ConventionǷһ!Ŀǰ:_cdecl* , _fastcall, _stdcall,MSĬϵ_cdecl*, һЩԱϲΪ_stdcall,õIJһҲɳҪԭ.õҪʵǶڶջά˭,߸DZԼά??òͬջά߾Ͳͬ,пɵߺͱͬʱȥջ,ɳ.
:_cdecl* , _fastcall, _stdcallöԳӰIJ֮ͬԲ鿴Ӧĵ.
һĿжԷҪ:ӡӡָÿһдӡַ,ӡнֽ.ΪʵһҪº,˼·:ȽҪӡļҪ֯һʱļ,֯ļĹرҪע,Ӣĵʶʹ.
ֽ,ϣܶⷽʾ,ҲϣλԼĿ,.(Ŀǰδ쳣.)
TransformFile(const char * pSourceName, const char * pDesName, int iStringLen)
{
HANDLE hPtrFile = NULL;
hPtrFile = ::CreateFile(pSourceName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY,
NULL);
if(hPtrFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hPtrFile);
hPtrFile = NULL;
}
if(hPtrFile != NULL)
{
DWORD dwPtrFileLen = ::GetFileSize(hPtrFile , NULL);
unsigned char *ptrFileData = new unsigned char[dwPtrFileLen + 2];
if(ptrFileData == NULL)
{
return -1; //ڴ治
}
else
{
memset(ptrFileData, 0, dwPtrFileLen + 2);
}
DWORD dwReadData = 0;
::ReadFile(hPtrFile, (LPVOID)ptrFileData, dwPtrFileLen, &dwReadData, NULL);
//Ŀļ
FILE * fDes;
fDes = fopen(pDesName, "w+");
if(fDes == NULL)
return -2; // can not create the des file
DWORD dwCurPos = 0; //Դļݵλ
//Դļеݰ趨глֺĿļ
unsigned char * pTmp;
pTmp = (unsigned char *)malloc(iStringLen + 2);
int iTmp = 0;
while(dwCurPos < dwReadData)
{
if(iTmp == 0)
memset(pTmp, 0, iStringLen + 2);
if(ptrFileData[dwCurPos] < 0x7F) //Ǻ
{
if(iTmp <= iStringLen - 1)
{
memcpy(&pTmp[iTmp], &ptrFileData[dwCurPos], 1);
iTmp ++;
dwCurPos ++;
}
else
{
//дĿļ
//Էָһеһַ0x0D 0x0A
if(pTmp[iTmp -1] == 0x0D)
{
pTmp[iTmp - 1] = 0x00;
iTmp --;
fwrite(pTmp, iTmp , 1, fDes);
fflush(fDes);
fwrite("x0Dx0A", 2, 1, fDes);
fflush(fDes);
dwCurPos ++; //˵0x0A(window±ļ
//0x0D 0x0A ǽŵģдһ0x0Dϵͳ
//Զһ0x0D)
}
else if(pTmp[iTmp -1] == 0x0A)
{
fwrite(pTmp, iTmp , 1, fDes);
fflush(fDes);
}
else
{
fwrite(pTmp, iTmp , 1, fDes);
fflush(fDes);
fwrite("x0Dx0A", 2, 1, fDes);
fflush(fDes);
}
iTmp = 0;
}
}
else //
{
if(iTmp <= iStringLen - 2)
{
memcpy(&pTmp[iTmp], &ptrFileData[dwCurPos], 2);
iTmp = iTmp + 2;
dwCurPos = dwCurPos + 2;
}
else
{
//дĿļ
fwrite(pTmp, iTmp , 1, fDes);
fwrite("x0Dx0A", 2, 1, fDes);
fflush(fDes);
iTmp = 0;
}
}
}
//һдļ
fwrite(pTmp, iTmp + 1, 1, fDes);
fwrite("x0Dx0A", 2, 1, fDes);
//ͷԴ
fclose(fDes);
free(pTmp);
free(ptrFileData);
CloseHandle(hPtrFile);
hPtrFile = NULL;
}
return 0;
}
cvcдĹⲻҪһЩַת,ȽϳдANSIUNICODE,ߴUNICODEANSI,ת?ϱߵľ,ʱṩֱȽϳķ,ԼҪע
(1)cеת
Եmbstowcs
ԭΪ:size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );
ͷļΪ:<stdlib.h>
ֵ֧IJϵͳΪ:ANSI, Win 95, Win NT
ʹתʱҪעǶڷӢΪԵĹҺ͵,ʹ֮ǰҪsetlocaleתַܲûϣõĽ
setlocale:
ԭΪchar *setlocale( int category, const char *locale );
ͷļ<locale.h>
ֵ֧IJϵͳΪ:ANSI, Win 95, Win NT
ڼĿʹãsetlocale( LC_ALL, "chs" );
ΪʲôһҪsetlocaleأ
ΪC/C++ԱжʱַΪ"C"ҲASCIIַһӼômbstowcsڹʱὫcstrַASCIIַΪһchsַὫÿһIJ2ASCIIתõĽǻγ4wchar_tַɵĴôβܹmbstowcsأڵmbstowcsת֮ȷĸmbstowcsĿǰcstrаchsַͨsetlocale( LC_ALL, "chs" )ɣҪעıӦóַ뷽ʽҪͨµsetlocale( LC_ALL, "C" )ԭͿԱ֤mbstowcsתʱcstrеĴĴתΪ2wchar_tַ4עת磬ллchemz
2vcеת
ԵMultiByteToWideChar
ԭΪ
int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // address of string to map
int cchMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // address of wide-character buffer
int cchWideChar // size of buffer
);
Header: Declared in winnls.h.
Import Library: Use kernel32.lib.
ʹMultiByteToWideCharʱҪעǣCodePageCP_ACPԥַCP_ACPȽϳãdwFlagsMB_PRECOMPOSEDȽϳҪرעcchWideCharòҪʹwcslenõΪöϰʹñǰȽʼΪ0ҲһܺõıϰߣԱһЩҪĴmemsetΪ0ȻwcslenĻMultiByteToWideCharѾת˶ַΪָcchWideCharΪ0ԲlpWideCharStrκβһҪرע⣬óֲҪĴ
ۺַ˵MultiByteToWideCharmbstowcsǿ档
¼
codepageMSDN
Bit Code page Description
ANSI
0 1252 Latin 1
1 1250 Latin 2: Eastern Europe
2 1251 Cyrillic
3 1253 Greek
4 1254 Turkish
5 1255 Hebrew
6 1256 Arabic
7 1257 Baltic
8 1258 VietNam
9 - 15 Reserved for ANSI
ANSI and
OEM
16 874 Thai
17 932 Japanese, Shift-JIS
18 936 Chinese: Simplified charsPRC and Singapore
19 949 Korean Unified Hangeul Code (Hangeul TongHabHyung Code)
20 950 Chinese: Traditional charsHong Kong SAR, PRC and Taiwan
21 1361 Korean (Johab)
22 - 29 Reserved for alternate ANSI and OEM
30 - 31 Reserved by system.
OEM
32 - 46 Reserved for OEM
47 1258 VietNam
48 869 IBM Greek
49 866 MS-DOS Russian
50 865 MS-DOS Nordic
51 864 Arabic
52 863 MS-DOS Canadian French
53 862 Hebrew
54 861 MS-DOS Icelandic
55 860 MS-DOS Portuguese
56 857 IBM Turkish
57 855 IBM Cyrillic; primarily Russian
58 852 Latin 2
59 775 Baltic
60 737 Greek; former 437 G
61 708 Arabic; ASMO 708
62 850 Western European/Latin 1
63 437 US
setlocal ʱҲʹ·ʽ
// ʱ趨ǰ ANSI 룬VC ʽ
setlocale(LC_ALL, ".936");
.936е936codepage
// GCC иʽ
setlocale(LC_ALL, "zh_CN.GBK");
vc6ṩһǿĹ,Custom AppWizard,ͬʱAppWizard,programmerԶԼAppWizard(microsoftڲʵԭʵһdll),Ժܷظʹô.
ôͨmicrosoftCustom AppWizardŸλܺܿ촴һ(Ǻ,"Hello World")AppWizard,漰һ,:
ɵAppWizardܶproject settingеĸ(c/c++ preprocessor, linkֶЩlib)һЩõʱôʵ?Ƚϵһִת,ϣͬ,·.
(1)ҵ****Aw.cpp ļеvoid C*****AppWiz::CustomizeProject(IBuildProject* pProject).
(2)CustomizeProject
using namespace DSProjectSystem;
long lNumConfigs;
IConfigurationsPtr pConfigs;
IBuildProjectPtr pProj;
CString sTemp;
// Needed to convert IBuildProject to the DSProjectSystem namespace
pProj.Attach((DSProjectSystem::IBuildProject*)pProject, true);
pProj->get_Configurations(&pConfigs);
pConfigs->get_Count(&lNumConfigs);
//Get each individual configuration
for (long j = 1 ; j < lNumConfigs+1 ; j++)
{
_bstr_t varTool;
_bstr_t varSwitch;
IConfigurationPtr pConfig;
_variant_t varj = j;
pConfig = pConfigs->Item(varj);
varTool = "link.exe";//ѡ
varSwitch = "yourlib.lib";
pConfig->AddToolSettings(varTool, varSwitch, varj);
}
Ҫע:
˷ʹmicrosoftCOM,Ϊ˳ͨͷļ
#import "../Bin/IDE/devbld.pkg"
#include <ObjModel/bldauto.h>
#include <ObjModel/blddefs.h>
#include <ObjModel/bldguid.h>ϸMSDN
vc6.0ок TryEnterCriticalSection ļ ͷļ ļDZ뻹dz⡣
ʱҪDzwindows趨windows汾ˡ
İ취ǣ
project--->setting --->c/c++--->Preprocessor definitions _WIN32_WINNT=0X0500 . 0x0500 ɱ䣩
stdafx.hļоͿˣ뱣֤ԼĻNTϵͳ
#define _WIN32_WINNT 0x0500
error C2065: 'TryEnterCriticalSection' : undeclared identifierĽ
ͨͷļǰݽ
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x500
#endif
#include "stdafx.h"
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x500
#endif
#include "afxwin.h"
#include "winbase.h"
int main(int argc, char* argv[])
{
TryEnterCriticalSection(NULL);
printf("Hello World!n");
return 0;
}






