
Cpp & C
文章平均质量分 60
jo_say
一壶烈酒
展开
-
关于vc下dll的相关知识
<br />1. Vc下生成,如果只是cpp使用,只需要在函数前加 _declspec(dllexport)就可导出,可以通过vc工具dumpbin exports查看。<br />2. Vc6下可以建立一个空的dll,里面什么文件都没有,这时只要新建一个cpp文件,里面放一个函数,然后函数头上加入标示:_declspec(dllexport)就可以生产带有函数输出的dll了。<br />3. 外部使用需求:<br />l extern 引用函数(extern在这里可以被-declspec(dlli原创 2010-07-16 09:53:00 · 816 阅读 · 1 评论 -
【转】内存访问越界
1. 原理分析<br />经常有些新C++程序员问:C++的类的成员个数是不是有限制,为什么我加一个变量后程序就死了?或者说:是不是成员变量的顺序很重要,为什么我两个成员变量顺序换一换程序就不行了?凡此种种之怪现象,往往都是内存访问越界所致。<br /><br />何谓内存访问越界,简单的说,你向系统申请了一块内存,在使用这块内存的时候,超出了你申请的范围。例如,你明明申请的是100字节的空间,但是你由于某种原因写入了120字节,这就是内存访问越界。内存访问越界的后果是:你的写入破坏了本不属于你的空间。<b转载 2010-06-21 00:09:00 · 1982 阅读 · 1 评论 -
[转] 堆和栈的区别
<br />【内部有一些图缺失,程序代码也有奇怪代码出现,因转载故未予更正,请观者自清】<br /> <br />一 预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br /转载 2010-06-15 16:44:00 · 559 阅读 · 0 评论 -
【转】How to call c++ exported method and classes in c#
相对于C++来说,C#是个newcomer,C#提供了一些非常cool的功能,使得我们的工作更加容易。但是,在这个组件横行的年代,如果不懂利用别人写好的代码,就有点落伍了。在C++横行江湖的日子里,留下了很多功能强大的代码,探讨如何在C#的程序中使用这些代码是非常有趣也很有意义的事情,这也是我们今天这篇文章的主题。 C#是managed code,而C++不是,他们之间的几种交互方式可以用下图表示(今天我们只谈managed code 调用 native code): 让我们看上图转载 2010-06-14 16:59:00 · 992 阅读 · 0 评论 -
[转] extern "C" 分析2
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C转载 2010-06-10 17:58:00 · 503 阅读 · 0 评论 -
_T ( "")和 L""
Unicode 的编码形式 默认情况下你的程序是多字符集的,要用Unicode的话要显示的用Unicode的宏 比如L " " _T( " ") TEXT( " ") 在相应的头文件里面这3个家伙是一样的! 象一些函数就只用Unicode版本的 而有些有Ansi/Unicode的典型的有 MessageBoxA()//Ansi MessageBoxW()//Unicode 在你的项目中默认是用多字符集的所以就用了MessageA的版本转载 2010-06-10 16:52:00 · 612 阅读 · 0 评论 -
平台调用数据类型对应关系
【来自msdn,只为方便查看】 下表列出了在 Win32 API(在 Wtypes.h 中列出)和 C 样式函数中使用的数据类型。许多非托管库包含将这些数据类型作为参数传递并返回值的函数。第三列列出了在托管代码中使用的相应的 .NET Framework 内置值类型或类。某些情况下,您可以用大小相同的类型替换此表中列出的类型 Wtypes.h 中的非托管类型 非托管 C 语言类型原创 2010-06-10 15:14:00 · 545 阅读 · 0 评论 -
实验setlocale:需要直接指定语言,如 chs
根据前面的那位仁兄讲的,就是【浅谈。。的那篇文章】 他的文章中是用 setlocale(LC_ALL, "zh_CN.UTF-8"); 但是我的电脑上可能不是这个,所以实验时结果不正确,查了下,直接指定语言,可能更好: setlocale(LC_ALL, "chs "); 也就是: wchar_t wstr[] = L"中文"; //必须加setlocale,设置此宽字符对应中文 setlocale(LC_ALL, "chs"); w原创 2010-06-11 12:52:00 · 8975 阅读 · 0 评论 -
【z】关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在里:typedef unsigned short wchar_t。 为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下: wchar_t c = `A' ; wchar_t * p = L"Hello!" ; wchar_t a[] = L"Hello!" ; 其中,宽字节类型每个变量占用2个字节,故上述数组a的转载 2010-06-11 12:15:00 · 829 阅读 · 0 评论 -
【z】浅谈C中的wprintf和宽字符显示
今天在优快云的Blog首页看到一篇文章“也谈计算机字符编码 ”,由于前一阵业余翻译了“UTF-8 and Unicode FAQ for Unix/Linux”一文,自己对字符集、编码和Unicode等内容一直保着者很强的兴趣,自然不会放过这样的文章。 作者的文章写得很明白易懂,虽然有一些概念上的细节问题我觉得有商榷之处;作者还给出一个简单的在windows下使用wprintf正确输出字符串“中文”的小例子,我linux下模仿作者给出的示例代码写了如下的示例代码: #include #inc转载 2010-06-11 12:01:00 · 711 阅读 · 1 评论 -
【z】深入 printf / wprintf / console下的unicode output
1. printf 只能提供ANSI/MB 的输出,不支持输出unicode stream. 例如: wchar_t test[]=L"测试1234"; printf("%s",test); 是不会正确输出的 2.wprintf 同样不会提供unicode output, 但是他会把wchar_t的string转为locale的SB/MB字符编码,然后输出 例如: wchar_t test[] = L"测试Test"; wprintf(L"%s",test); 会输出转载 2010-06-11 11:41:00 · 861 阅读 · 0 评论 -
(转)C++中extern "C"含义深层探索
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 2.从标准头文件说起 某企业曾经给出如下的一道面试题: 面试题 为什么标准头文件都有类似转载 2010-06-10 17:46:00 · 422 阅读 · 0 评论 -
【转】#define 总结
【总结的兄弟:辛苦了】 1. 定义简单的常数:定义常量,便于修改(切不可在后面加上分号!) #define N 1000 等效于 const int N = 1000; 但略有不同,define只是简单替换,而不是作为一个量来使用. 2. 定义简单的函数:注意多使用括号 define可以像函数那样接受一些参数,如下: #define max(x,y) (x)>(y)?(x):(y); 这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,转载 2010-06-10 00:09:00 · 476 阅读 · 0 评论 -
【转】typedef struct 用法详解及其在c与c++中的区别
第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。 2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器转载 2010-06-09 23:59:00 · 635 阅读 · 0 评论 -
[转] typedef的四个用途和两个陷阱
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *pa, *pb; 也可行,但相对来说没有用type转载 2010-06-09 23:42:00 · 477 阅读 · 0 评论 -
方便查看 WinDef.h
/**************************************************************************** * * * windef.h -- Basic Windows Type Definitions * *原创 2010-06-09 23:09:00 · 2489 阅读 · 1 评论 -
[c++] 调用约定 calling convention
调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定: _cdecl 按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于“C”函数或者变量,修饰名是在函数名前加下划线。对于“C++”函数,有所不同。 如函数void test(void)的修饰名是_test;对于不属于一个类的“C++”全局函数,修饰名是?test@@ZAXXZ。转载 2010-06-09 22:03:00 · 583 阅读 · 0 评论 -
【转】#pragma once与 #ifndef的区别
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif 方式二: #pragma once ... ... // 一些声明语句 #ifndef的方式依赖于宏名字不能冲突,这转载 2010-06-09 21:13:00 · 466 阅读 · 0 评论 -
vc2010_error C1189:#error:This file requires _WIN32_WINNT to be #defined at least to 0x
<br />1 首先肯定是版本的问题<br />2 一般可以通过修改stdafx.h解决<br />3 可以看这篇文章的解决方法:http://kevin-hust.javaeye.com/blog/744286<br />4 我的解决方法:把前面的两段给注释了,下面的保留:<br /><br />#include <afxwin.h> // MFC 核心和标准组件<br />#include <afxext.h> // MFC 扩展<br />#include <afxcv原创 2011-03-15 21:38:00 · 1036 阅读 · 0 评论