vector作为参数传递到dll问题

最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况。这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中相应的数据问题,始终都获得不了正确的数据,要么就是一些非法的数据;另一个问题就是delete这个指针时候会产生相应异常(针对这个问题的思考:如果EXE和DLL都链接到DLL的C/C++运行期库,那么代码将能够很好地运行.但是,如果两个模块中的一个或者两个链接到静态C/C++运行期库,那delete的操作就会失败.)。这叫一个折腾的纠结啊。搜罗了一些网络资料以备以后的参考学习: ...
C++ | 2014-07-28 20:50 | 阅读 4397 次 | 评论 0 条

MFC 如何设置鼠标的形状 如何设置光标热区

原文链接:http://blog.163.com/wenxianliang08@126/blog/static/8358326320111101856195/ Windows程序和Doc程序很大的不同 , 就在于Windows有一个亮丽的图形界面和简捷的操作方式 , 而鼠标就是Windows程序中最重要的一个操作手段 . 有朋友向我咨询如何修改鼠标形状 , 这本来是一个简单的问题 ,但是当朋友向我询问进一步的,更加深入的操作机制时 ,我才发现里面隐藏着更多的问题 , 回到家里研究了一下 ,得到一些结论 。 这里就Windows下鼠标形状的一些修改方...
MFC | 2014-03-14 22:33 | 阅读 4270 次 | 评论 0 条

VC6 scanf float 出错----bug?

#include <stdio.h> int main() { float f; scanf("%f", &amp;f); return 0; } 请有VC6.0的朋友试一下这个程序,运行的时候输入一个数字,会出现runtime error(运行期错误),VS2008没有错误,其它的版本没有试。 查了一下资料微软给出的官方解释是:当应用程序从控制台读取的浮点值,到一个未初始化"浮动"类型的全局变量使用 scanf() 函数时,则会发生 R6002 浮点格式支持不加载"错误。 在使用任何格式输入的例程中读取值时,也会发生此错误。 ...
默认分类 | 2014-03-13 22:31 | 阅读 1585 次 | 评论 0 条

策略模式与工厂模式结合

GOOD:客户端只需访问Context类,而不用知道其它任何类信息,实现了低耦合。 //策略基类 class COperation { protected: int m_nFirst; int m_nSecond; public: virtual double GetResult() { return 0; } }; //策略加法类 class AddOperation : public COperation { public: AddOperation(int num1, int num2) { m_nFirst ...

策略模式

定义算法家族,分别封装起来,让它们之间可以相互替换,让算法变化,不会影响到用户。 GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试)。 策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。 BUG:客户端要做出判断 //策略基类 class COperation { public: int m_nFirst; int m_nSecond; virtual double G...

彻底解密C++宽字符

1、从char到wchar_t “这个问题比你想象中复杂” 从字符到整数 char 是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型。好,接下来,很多文章就会举出一个典型例子,比如,'a'的数值就是0x61。这种说法对吗?如果你细心的读过K&amp;R和BS对于C和C++描述的原著,你就会马上反驳道,0x61只是'a'的ASCII值,并没有任何规定C/C++的char值必须对应ASCII。C/C++甚至没有规定char占几位,只是规定了sizeof(char)等于1。 当然,目前大部分情况下,char是8位的,并且,在ASC...
默认分类 | 2014-02-11 19:21 | 阅读 4175 次 | 评论 0 条

InterlockedIncrement函数详解

InterLockedIncrement and InterLockedDecrement 实现数的原子性加减。什么是原子性的加减呢? 举个例子:如果一个变量 Long value =0; 首先说一下正常情况下的加减操作:value+=1; 1:系统从Value的空间取出值,并动态生成一个空间来存储取出来的值; 2:将取出来的值和1作加法,并且将和放回Value的空间覆盖掉原值。加法结束。 如果此时有两个Thread ,分别记作threadA,threadB。 1:threadA将Value从存储空...
默认分类 | 2014-02-10 00:18 | 阅读 1452 次 | 评论 0 条

内存管理相关的几个函数

一、内存管理基础 win32中的内存管理是分层次的,系统提供了几组层次不同的函数来管理内存,它们是 标准内存管理函数、堆管理函数、虚拟内存管理函数和内存映射文件函数。 windows充分利用了80X86处理器保护模式下的线性寻址机制和分页机制,这些机制是 win32内存管理的基础。 1)虚拟内存管理函数:管理虚拟内存,主要用于保留/提交/释放虚拟内存,在虚拟内存 页上改变保护方式、锁定虚拟内存页,以及查询一个进程的虚拟内存等操作,这是一组位于 底层的函数。 2)堆管理函数:堆的主要功能是有效地管理内存和进程的地址空间。win32中,进程可以 使用的整个地...
默认分类 | 2014-02-09 11:23 | 阅读 2519 次 | 评论 0 条

IP、ICMP、UDP、TCP 校验和算法

以前看计算机网络相关的书,每次看到IP或者UDP报头校验和时,都一瞥而过,以为相当简单,不就是16bit数据的相加吗。最近在研究《TCP/IP详解 卷1:协议》这本书,看到校验和是16bit字的二进制反码和(晕,以前都没注意原来是反码和,看来以前看书不仔细啊!罪过,罪过~~),觉得很奇怪,为什么会用反码和,而不是直接求和呢?(因为我认为TCP/IP协议里面的算法和思想一般都是非常经典的,人家这么做一定有原因的)下面就来探索一下这个校验和算法具体怎么实现的。 首先,IP、ICMP、UDP和TCP报文头部都有校验和字段...
网络编程 | 2014-02-08 23:02 | 阅读 5021 次 | 评论 0 条

MFC中的_T宏

Windows使用两种字符集ANSI和UNICODE, 前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。 而后者是双字节方式,方便处理双字节字符。 Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。 而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。 _T()和_L()...
MFC | 2014-02-07 15:24 | 阅读 3446 次 | 评论 0 条

简单工厂模式

计算器的实现: 1)业务逻辑代码 /************************************************ Class: 运算类 Description: 各种运算的父类,提供公共接口 ************************************************/ class COperation { public: double m_nFirst; double m_nSecond; public: virtual double GetResult() { return 0; } ...

netstat命令详解

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息, 语  法:netstat [-acCeFghilMnNoprstuvVwx][-A网络类型>][--ip] 补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。 参  数: -a或--all 显示所有连线中的Socket。 -A网络类型>或--网络类型> 列出该网络类型连线中的相关地址。 -c或--continuous 持续列出网络状态。 -C或--cache 显示路由器配置的快取信息。 -e或--exten...
默认分类 | 2014-02-06 22:17 | 阅读 2254 次 | 评论 0 条

select模型服务器端和客户端代码

使用VC6.0编译。为了测试方便,服务器端只接收一次数据,当客户端关闭后,服务器端也随之关闭。 服务器端代码: #include "../common/InitSock.h" #include <stdio.h> CInitSock theSock; //加载套接字库 int main() { USHORT nPort = 4567; //此服务器监听的端口号 //创建监听套接字 SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); so...
网络编程 | 2014-02-06 22:11 | 阅读 3685 次 | 评论 0 条

虚函数 原理

虚(virtual)函数的一般实现模型是:每一个类(class)有一个虚表(virtual table),内含该class之中有作用的虚(virtual)函数的地址,然后每个对象有一个vptr,指向虚表(virtual table)的所在。 请允许我援引自深度探索c++对象模型一书上的一个例子: class Point { public: virtual ~Point(); virtual Point&amp; mult( float ) = 0; float x() const {...
C++ | 2014-02-06 13:07 | 阅读 2166 次 | 评论 0 条

C++中public,protected,private访问

第一:private, public, protected 访问标号的访问范围。 private:只能由1.该类中的函数、2.其友元函数访问。 不能被任何其他访问,该类的对象也不能访问。 protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。 但不能被该类的对象访问。 public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。 注:友元函数包括3种:设为友元...
C++ | 2014-02-05 20:56 | 阅读 2169 次 | 评论 0 条

VC6.0的INTERNAL COMPILER ERROR错误 (转)

今天复习关于运算符重载这一章节,以前学习的时候用的是gcc编译器, 在VC6.0的时候会遇到莫名其妙的问题: --------------------Configuration: integer1 - Win32 Debug-------------------- Compiling... integer.cpp D:\My Documents\我的工程\integer1\integer.cpp(9) : fatal error C1001: INTERNAL COMPILER ERROR (compiler f...
C++ | 2014-02-05 09:37 | 阅读 2889 次 | 评论 0 条

C++代码注释规范(整理)(转)

最近一直在给项目代码加注释,因为结项有一项工程性的要求是注释占到总行数的额50%,这几天可苦了我们几个。前几天为了统一项目组的注释规范,专门整理了一份,以后可能也用得着,放着备份下。 1 源文件头部注释 Ø 列出:版权、作者、编写日期和描述。 Ø 示例: /************************************************* Copyright:bupt Author: Date:2010-08-25 Des...
C++ | 2014-02-04 17:52 | 阅读 1682 次 | 评论 0 条

C/C++内存对齐

一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适...
C++ | 2014-02-01 23:11 | 阅读 3156 次 | 评论 2 条

用C++实现网络编程---抓取网络数据包的实现方法(转)

做过网管或协议分析的人一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议、IP、UDP、TCP、甚至各种应用层协议),敏感数据的捕捉等。下面我们就来看看在windows下如何实现数据包的捕获。 下面先对网络嗅探器的原理做简单介绍。 嗅探器设计原理 嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与...
网络编程 | 2014-02-01 22:24 | 阅读 5402 次 | 评论 0 条

sscanf 用法(转)

sscanf() - 从一个字符串中读进与指定格式相符的数据。 swscanf()- 用于处理宽字符字符串,和sscanf功能相同。 一、函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *format,[argument ]...); buffer存储的数据 format格式控制字符串 argument 选择性设定字符串 ...
C++ | 2014-02-01 21:42 | 阅读 5630 次 | 评论 0 条