- 博客(117)
- 收藏
- 关注
原创 VC位图文件的保存与转换
<br />1:写位图文件函数:<br />BOOL Write2Bitmap(BYTE *pData,CString filename,int width,int height,int bitcount) { FILE *fe; int i; int index = 0; unsigned char rgbquad[4]; BITMAPFILEHEADER bitmapFileHeader; BITMAPINFOHEADER bitmapInfoHeader;
2010-07-27 14:53:00
1431
原创 复制位图到剪贴板
<br /><br />复制一幅位图到剪贴板相当简单,需要记住的一个是如果位图需要调色盘,<br />你应当将调色盘也复制。<br />函数一:复制设备相关位图到剪贴板CopyBitmapToClipboard()函数复制一幅DDB位图到剪贴板,如果提供调色盘它将同时复制调色盘。注意在最后调用Detach()。这一点很重要,因为此时GDI对象的物主已经传送至剪贴板。// CopyBitmapToClipboard - Copies a device-dependent bitmap
2010-07-15 15:38:00
3106
转载 C++和C#编写调用COM组件
<br /> <br />C++和C#编写调用COM组件源代码下载<br /><br /><br />摘要:现在COM组件的使用越来越广泛,在各个程序中调用COM组件我想大家都遇到过,这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。<br /><br />关键字:VC6.0编写调用COM VS2005中C#编写和调用COM VC6.0和VS2005之间互相调用COM<br
2010-07-15 10:55:00
1344
原创 如何使EditBox支持拖拽
<br />1:封装CDrapFileEdit类使其派生于CEdit类 。<br />2:添加WM_DROPFILES消息<br />3:编辑OnDropFiles 添加代码如下:void CDragFileEdit::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default int fcount = ::DragQueryFile(hDropInfo,
2010-07-15 10:00:00
959
转载 WaitForMultipleObjects使用详解
DWORD WaitForMultipleObjects( DWORD nCount, // number of handles in the handle array CONST HANDLE *lpHandles, // pointer to the object-handle array BOOL fWaitAll, // wait flag DWORD dwMilliseconds // time-out in
2010-07-15 09:24:00
933
原创 PostQueuedCompletionStatus详解
<br />PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatus函数的定义: <br />BOOL PostQueuedCompletionStatus( <br /> HANDLE CompletlonPort, <br /> DW0RD dwNumberOfBytesTrlansferred, <br /> DWORD dwCompl
2010-06-29 14:52:00
8369
1
转载 InterlockedIncrement和InterlockedDecrement的妙用
view plaincopy to clipboardprint?class A { protected: static long m_nRef; public: //类A的构造函数 A() { if(1 == InterlockedIncrement(&m_nRef)) { //以下代码只执行一次 WSADATA wsaData;
2010-06-29 14:50:00
837
转载 VC中使用系统提供的线程池
<br /> 在项目里经常用到多线程,大量的客户向服务器提出请求,这时需要开辟线程来响应客户请求,由于客户量是不可预知的,难道来一个客户请求就新开个线程来响应吗?答案是否定的,要知道开辟和撤消线程是需要耗费相当多时间和资源的,于是前辈们弄出了很多模型出来解决这种问题,其中使用线程池(Thread Pooling)是个很好的主意。线程池在Windows2000及其以后版本得到了很好的支持。使用系统提供的线程池机制相当方便而且很有效率。我们仅需要关注于我们的回调函数即可。我们可以自己来实现线程池机制,但是与我
2010-06-29 14:49:00
649
转载 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects) --代替方法:MsgWaitForMultipleObjects
<br /><br /> 在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)<br />下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?<br /><br />线程函数:DWORD WINAPI ThreadProc(<br /> while(!bTerminate)<br /> {<br /> // 从一个链表中读取信息并且插入到CListCtrl中<br /> // CListCtrl的句柄是通过线
2010-06-29 14:44:00
1367
转载 用Sleep或WaitForSingleObject实现线程的休眠
<br /> Sleep函数可以实现这个功能:<br /> Sleep( DWORD dwMilliseconds );<br /> 其中dwMillisenconds为要休眠的毫秒数,当dwMillisenconds为0时,CPU将把时间切片转给优先级较高的进程。<br /> 但Sleep函数有个不好的地方,你不能让它在中途停下来,如果我们要让蜘蛛在两个链接点之间的休眠10秒(10000毫秒)或者更长,而期间又想控制蜘蛛停止工作,会造成界面出现死机状态,因此Sleep函数只适合很短
2010-06-29 14:42:00
1701
转载 gsoap使用心得!
<br />一 gSOAP需要的头文件:<br /><br />//gsoap ns service name: calc<br />//gsoap ns service style: rpc<br />//gsoap ns service encoding: encoded<br />//gsoap ns service namespace: http://127.0.0.1:8089/calc.wsdl<br />//gsoap ns service location: http://127.0.0.1
2010-06-29 14:40:00
1212
转载 std::fstream在VC2003.net中的使用问题
<br />在支持MFC的Win32控制台工程中一般有如下宏<br />#ifdef _DEBUG<br />#define new DEBUG_NEW<br />#endif<br /> 定义了该宏会导致include fstream头文件失败,如下:<br />d:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/include/fstream(465) : error C2061: syntax error : identifier '_Debu
2010-06-29 14:39:00
799
转载 vc中使用nmake命令编译方法
<br /> 由于最近工程较多,在SI的时候很是麻烦,将所有的工程都编译一次,再将可执行文件和生成的库文件全部拷贝到bin目录下,真的做了一次以后就感觉工作量的巨大,可能也是人比较懒的原因,以前就听说过vc可以用命令行编译于是上网狂搜,终于做了一个p处理,以后省事了,只要不改依存逻辑,以后就一键SI了,哈哈。啊,差点忘了说了,介绍一个我的方法,nmake命令就不多解释了,打-?里面解释都有。<br /> vc6.0其实已经不再使用makefile文件进行编译了,但是它仍然可以导出make
2010-06-29 14:37:00
1452
转载 Makefile文件
<br />Makefile文件<br /><br />Makefile<br /><br />一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。<br />makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开
2010-06-29 14:36:00
1133
转载 进程外服务器的代理存根DLL的创建
<br />进程外服务器的代理存根DLL的创建<br /><br /><br />源代码下载<br />http://download.youkuaiyun.com/source/1792728<br /><br />源自于一位网友的提问<br />http://topic.youkuaiyun.com/u/20091101/20/10b3651a-7494-44fb-9861-fb2d3c5134d7.html?72825<br />问题描述 : 客户端调用进程外组件接口时,由于要获取的不是缺省的接口(IUnknown,IDis
2010-06-29 14:34:00
1577
转载 栈内存管理
21.2 栈内存管理<br />栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。在执行函数时,函数内局部变量的存储单元都能够在栈上创建,函数执行结束时这些存储单元会自动被释放。21.2.1 申请栈内存<br />栈内存有两种实现方法,一种是由系统根据需要自动分配,程序不能控制,另一种是用堆来模拟栈的操作。下面通过两个例子来看一下栈空间是如何分配的。<br />【示例21-2】 函数f是递归函数,当从第n层进入第n+1层时就需要在栈上存储现场。<br />int fun(int x
2010-06-29 14:31:00
1152
转载 INFO:OLE 线程模型的说明和工作方式
<br />转载地址:http://support.microsoft.com/kb/q150777/<br /> COM 对象可以用于一个进程的多线程。“单线程单元” (STA) 和“多线程单元” (MTA) 术语用于为描述对象与线程间的关系、对象间的并行关系、使用何种方法将调用传递给对象的方式以及在线程间传递接口指针的规则而建立的概念框架。组件及其客户可以在 COM 目前支持的以下两个单元模型之间进行选择: <br /><br />单线程单元模型 (STA):进程中一个或多个线程使用 COM ,并且 C
2010-06-29 14:28:00
622
翻译 关于什么时候使用CoTaskMemAlloc/CoTaskMemFree来申请/释放内存
<br />从网上看来的说法:<br />The thing is that COM (actually the RPC runtime library, but it's easier to blame COM) has an additional requirement for [out] pointers. This requirement is that if the type of an [out] parameter isn't a scalar quantity (in other word
2010-06-29 14:26:00
3719
1
原创 CoCreateInstanceEx详解
CoCreateInstanceEx常用于创建远程组件,因为考虑到远程访问时要在网络上来回传递信息,所以此函数允许一次询多个接口。 <br /><br />CoCreateInstanceEx参数说明 <br />共有如下六个参数,分别为: <br />REFCLSID rclsid:指定要实例化COM组件的GUID <br />IUnknown *punkOuter: <br />DWORD dwClsCtx:指定服务器组件的类型,可以为以下值: <br />CLSCTX_INPROC_SER
2010-06-29 14:24:00
9371
2
原创 VC中调用远程dll组件
<br />DCOM应该不能是DLL,如果组件是DLL,建议使用MTS或COM+,将DLL注册进MTS或COM+,在利用它们导出组件(会有一个注册你这个DLL的安装程序),拿那个安装程序在远程机器(客户机)上运行一下,接下来这个组件就可以被看作在本机上了。
2010-06-29 14:19:00
1165
原创 DCOM和COM的不同
<br />问题:DCOM和COM有什么不同?如何去搭建DCOM的框架?<br />简单理解:<br />DCOM是exe文件格式的,是进程外的组件 <br />COM是dll文件格式的,是进程内的组件 <br />使用ATL的时候选择service选项就可以建立DCOM组件 <br />其它和是用COM是一样的<br /> <br />其实DCOM和COM在编程方面区别不大,microsoft说COM是DCOM的无缝扩展,也有一定的道理,但对比COM,DCOM内部实现细节有很大的区别。 <br /><br
2010-06-29 14:18:00
1404
转载 COM线程模型汇总
<br />在这一部分我将讲解COM提出的各个类型的线程模型,并说明COM运行时期库是如何实现它们的。<br />本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的.<br />线程模型是一种数学模型,专门针对多线程编程而提供的算法,但也仅是算法,不是实现。本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的,就像说明Windows是如何实现线程这个数学模型的一样,最后指明一下跨套间调用和各种类型套间编写的要求以帮助理解。希望读者对于Windows操作系
2010-06-29 14:15:00
583
转载 微软在线文档之 ATL 自定义控件的制作
转载地址:http://hi.baidu.com/mizzletown/blog/item/fdc4a39b1075bbb1c8eaf420.html使用ATL,可以创建高效、灵活、轻量级的控件,本教程会指导你创建控件并验证一些ATL基本原理。<br />本教程通过七个步骤创建ATL控件,绘制一个圆和圆内的填充多边形。我们可以向工程中添加一个控件,设置Sides属性指明多边形的边数,然后添加绘制代码在属性变化时显示控件,此外我们还可以使控件响应click事件、向控件添加一个属性页、将控件置于一个网页上。<b
2010-06-29 14:12:00
2491
原创 泛说"COM线程模型"
<br />我对“公寓 ”一词说实在一直不太搞得清楚,而企图上论坛问人的话他们总是喜欢回答:“你还是好好把《COM本质论》看一遍吧。”其实如果其中有些关键部分不理解的话,就算看上十遍也是不行的,我们需要的是一本适合自己的教材,今天偶尔发现这篇文章,所以转上来,希望读者能发表下意见。为了方便阅读,我对原文稍微进行了一些排版。<br /><br /> <br />COM线程模型在COM相关的基础知识中应该算是难点,难的原因可能有这些:<br />1、需要对COM其它基础知识有较深的了解,因为这个论题几乎涉及到了
2010-06-29 14:06:00
479
原创 COM线程模型4
套间实现规则<br /><br /> 如前面所说,COM的套间机制要成功,必须服务器(组件)、客户和COM运行时期库三方面合力实现,其中有任何一方不按着规矩来,将不能实现套间机制的功能,不过这并不代表什么错误,套间机制不能运作并不代表程序会崩溃,只是不能和其他COM应用兼容而已。<br /><br /> 比如:对象中的属性1在设计的算法中肯定不会被两个以上的线程写入,只是会被多个线程同时读出而已,因此不用同步,可以用MTA,但对象的属性2却可能被多个线程写入,因此决定使用STA。从而在客户端,通过前面说
2010-06-29 14:05:00
456
原创 COM线程模型2
COM套间<br /><br /> Apartment被翻译成套间或是单元,是线程模型的一个实现者,就像在操作系统课程中讲到的线程只是一个数学模型,而Windows的线程、进程是它(数学模型的线程、进程)的实现者。套间只是逻辑上的一个概念,实现时只是一个结构(由COM管理)而已,记录着相关信息,如它的种类(只能是上面那三个,至少现在是),并由COM根据那个结构进行相应的处理。下面说明这三种套间的实现方式:<br /><br /> STA套间 一个套间如果是STA,那么那个套间有且只有一个线程和其关联,有
2010-06-29 14:04:00
380
原创 COM线程模型3
套间生成规则<br /><br /> 线程在进行大多数COM操作之前,需要先调用CoInitialize或CoInitializeEx。调用CoInitialize告诉COM生成一个STA套间,并将当前的调用线程和这个套间相关联。而调用CoInitializeEx( NULL, COINIT_MULTITHREADED );告诉COM检查是否已经有了一个MTA套间,没有则生成一个MTA套间,然后将那个套间和调用线程相关联。接着在调用CoCreateInstance或CoGetClassObject等创建对
2010-06-29 14:04:00
488
转载 COM线程模型1
<br />COM中有下面一些使用规则。。 <br />1,从一个线程调用Coinitliaze开始,到CoUninitliaze结束,这段区域称为套间(appartment)。 <br />COM对象接口必须在套间内创建和使用。 <br />2,接口指针不能跨套间使用,也就是说,在A套间创建的接口指针不能在B套间使用。 <br />3,A套间创建的接口指针可以Marshal--》UnMarshal 在B套间生成一个新的接口指针,然后B 套间可以用它。 <br />4,跨套间有几种情况:跨线程,跨进程,远程
2010-06-29 14:03:00
617
原创 组件的引用计数问题
<br />上面一个章我讨论了两种方式的组件使用方法。这是组件最最基本的两个问题,即简单组件的编写与使用。由于这是两个比较简单的话题,我们编写的组件也没有多大的实用价值。要想编写在实际的地理信息系统(GIS)平台软件的组件库,仅仅前面两章的内容是远远不够的。这一章我们将继续讨论我们在做COM组件是GIS的可能要用到的一些高级一点的组件技术问题。1、组件的引用计数问题<br />COM组件的生命周期控制采用的是引用计数的内存管理技术。COM组件维护一个成为引用技术的数值。当客户重组件获得一个接口的时候,此引
2010-06-29 14:01:00
1110
原创 CoCreateInstance讲解
<br /><br /> 函数功能描述:用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。当在本机中只创建一个对象时,可以调用CoCreateInstance;在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数。<br /> 函数原形:<br /> STDAPI CoCreateInstance(<br /> REFCLSID rclsid, //创建的Com对象的类
2010-06-29 13:52:00
4692
转载 MFC中CCOMBOX组合框的使用
MFC中CCOMBOX组合框的使用如何在MFC中使用CCOMBOX组合框?下面将用一个例子介绍CCOMBOX组合框控件常用的方法。首先我们新建一个single类型的mfc.exe工程,在菜单栏中添加一个菜单项,如“CCOMBOX组合框”,双击后可以在里面添加相关事件。插入一个Dialog对话框,并添加一个类CDlgCombox,上面添加2个组合框,7个按钮。详细代码如下
2008-09-19 15:13:00
4868
转载 static_cast
static_cast 用法:static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于
2008-09-19 15:10:00
727
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人