易截截图软件、单文件、免安装、纯绿色、仅160KB

C运行时库(解析mainCRTStartup)

1.概论
  运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个j时期的C运行时库都是单线程的。
  随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。
  因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。多线程运行时库与单线程运行时库有两个重大差别:
  (1)类似errno的全局变量,每个线程单独设置一个;
  这样从每个线程中可以获取正确的错误信息。
  (2)多线程库中的数据结构以同步机制加以保护。
  这样可以避免访问时候的冲突。
  Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此Visual C++共提供了6个运行时库。如下表:
C运行时库 库文件
Single thread(static link)  libc.lib
Debug single thread(static link)  libcd.lib
MultiThread(static link)  libcmt.lib
Debug multiThread(static link) libcmtd.lib
MultiThread(dynamic link) msvert.lib
Debug multiThread(dynamic link) msvertd.lib 
void mainCRTStartup(void)
{
 int mainret;
 /*获得WIN32完整的版本信息*/
 _osver = GetVersion();
 _winminor = (_osver >> 8) & 0x00FF ;
 _winmajor = _osver & 0x00FF ;
 _winver = (_winmajor << 8) + _winminor;
 _osver = (_osver >> 16) & 0x00FFFF ;
 _ioinit(); /* initialize lowio */
 /* 获得命令行信息 */
 _acmdln = (char *) GetCommandLineA();
 /* 获得环境信息 */
 _aenvptr = (char *) __crtGetEnvironmentStringsA();
 _setargv(); /* 设置命令行参数 */
 _setenvp(); /* 设置环境参数 */
 _cinit(); /* C数据初始化:全局变量初始化,就在这里!*/
 __initenv = _environ;
 mainret = main( __argc, __argv, _environ ); /*调用main函数*/
 exit( mainret );


相关文档:

C Language: A Example of Print Snake Matrix


// SnakeMatrix.cpp : Defines the entry point for the console application.
// Create by Xianyi.Ye, May 4,2010
#include "stdafx.h"
#include <iostream.h>
/*
Question: Print a Sanke Matrix as following
i\j 1 2 3 4 5 6
1 1 2 9 10 25 26
2 4 3 8 11 24 27
3 5 6 7 12 23 28
4 16 15 14 ......

打开IE说无法找到脚本文件【C:Progeam Files\*】

今天发现电脑出现莫名奇妙的问题,任务栏的图标都无法使用了。而且注册表也无法使用。
处理方法:
一、先解锁注册表。此步骤后可以正常访问修改注册表。
http://zhidao.baidu.com/question/8109053.html?fr=ala0
注册表被管理员停用,
1、新建一个文本文件,在其中输入以下内容。
[HKEY_CURRENT_USER/Software/Micro ......

Visual C++ C runtime库名称分析

单线程
Single-Threaded(static)                            libc.lib
Debug Single-Threaded(static)           & ......

ArcSDE C APi的C#调用

选两个比较有代表性的函数
首先下载安装sdk,将其中的sde.dll,pe.dll和sg.dll拷贝过来
使用如下的代码,指定dll后直接调用其中的函数,
/// <summary>
/// Sets the value for a small integer column.
/// </summary>
[DllImport(".\\sde91.dll", SetLastError = true, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号