自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 OMRON NB7触摸屏读写功能外移

当前做的项目要在触摸屏上实现操作人员权限管理,主要是前后翻页,人员添加删除等等由于nb可以支持.h,我逻辑引擎已经用c语言全部用Qt+mwing实现完毕,到时候在MainEntry中添加Go(),不过其中要用到读写本地内存的操作,就遇到难点了NB7有2个读写内存的函数ReadLocal(),WriteLocal(),我在一个头文件加了这么一段代码,这样就可以不借助OMRON的静态库在Qt中

2012-11-03 22:32:15 2090

原创 虚拟电子秤之Atl实现02

这几天,一直在看OLE和ATL书,公司要上一个工业新项目,时间不是很紧,我准备用Flash连接C++解决。话说现在的Flash不比当年,大致看了一下AS3的语法,就是Java翻版,连FB4编译器也是eclipse改的。记得好像以前的Flash中可以嵌入COM组件,现在应该也可以吧,但是这个可能性坚定了我搞定ATL的决心。于是还是这个电子秤项目先入手。电子秤是大众化的叫法,其实是由2个部分组成的

2012-10-23 13:11:43 814

原创 OMRON NB7触摸屏添加.h头文件

OMRON新的NB7触摸屏号称支持c89语言,但是我进去一看其每个生成的用户c文件,都有一个MainEntry()似乎是开放给上级某个虚拟引擎调用的,用户c文件无法看到其他的用户c文件,也无法共享函数和数据结构。我试着在项目文件夹里查找用户生成.c文件,的确是找到了,然后在同一fold中手动建立一个info.h文件,在用户.c文件中加上#include "info.h"字段,回NB7软件编译,

2012-10-17 08:59:19 2527

原创 ATL Internals 2ed复习.chapter 8.COM Collection and Enumeration Interfaces

COM Collection接口定义类似于:[ object, dual ]template typename T>interface ICollection : IDispatch { [propget] HRESULT Count([out, retval] long* pnCount); [id(DISPID_VALUE), propget] HRES

2012-10-10 23:02:54 897

转载 VC静态链接库建立(ZT自MSDN)

Walkthrough: Creating and Using a Static Library  Visual Studio 2005 Other Versions Visual Studio 2012Visual Studio 201090 out of 122 rated this helpful- Rate t

2012-10-09 10:25:54 526

原创 ATL Internals 2ed复习.chapter 7.ATL Persistence implements

The Property MapPROP_ENTRY (szDesc, dispid, clsid)PROP_ENTRY_EX (szDesc, dispid, clsid, iidDispatch)PROP_DATA_ENTRY (szDesc, member, vt) IPersistPropertyBagImpl只能实现对VARIANT的读写VT_UI

2012-10-07 21:37:37 586

原创 ATL Internals 2ed复习.chapter 7.COM Persistence

需要保存自身状态的object应该提供IPersistMedium,这里Medium=Stream,Storage,PropertyBag等client决定何时在何种媒体上要保存object的状态,调用IPersistMedium的Load(),Save(),并且为这两个函数提供相应的IMedium接口所有的IPersistMedium都派生自IPersist接口:interface

2012-10-07 17:26:01 814

原创 ATL Internals 2ed复习.chapter 6.interface map tricks

Handling Name Conflicts接口定义有时会遇到命名冲突,例如:interface ICowboy : IUnknown { HRESULT Draw();};interface IArtist : IUnknown { HRESULT Draw();}; // Ace Powell was a cowboy/a

2012-10-07 16:30:57 428

原创 ATL Internals 2ed复习.chapter 6.各种interface map宏

COM_INTERFACE_ENTRY and COM_INTERFACE_ENTRY_IID#define COM_INTERFACE_ENTRY_IID(iid, x) \ { &iid, offsetofclass(x, _ComMapClass), _ATL_SIMPLEMAPENTRY},COM_INTERFACE

2012-10-07 16:09:30 653

原创 ATL Internals 2ed复习.chapter 6.Table driven QueryInterface

The Raw Interface MapATL实现QueryInterface的方法是调用CComObjectRootBase::InternalQueryInterface():static HRESULT WINAPI CComObjectRootBase::InternalQueryInterf

2012-10-07 15:22:44 515

原创 ATL Internals 2ed复习.chapter 5.CAtlModule

The _AtlModule Global Variable每一个项目,wizard都会生成一个全局变量_AtlModule,用户可以通过全局指针_pAtlModule来访问它,例如:class CMathModule : public CAtlDllModuleT {public: DECLARE_LIBID(LIBID_Math) DECLARE_REGIS

2012-10-07 14:28:05 794

原创 ATL Internals 2ed复习.chapter 5.Object Map

由于有3种COM Server,ATL提供了CAtlModule的派生类对应CAtlDllModuleT:in-process dllCAtlExeModuleT:out-process exeCAtlServiceModuleT:system service exe CAtlModule使用了Object Map管理server中所有的类CAtlModule的职责找到

2012-10-07 12:11:58 703

原创 ATL Internals 2ed复习.chapter 5.COM Server review

有3种类型的COM Serverin-process server (DLL)提供了4个入口BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved); //当线程创建和销毁时被OS调用

2012-10-07 10:46:05 564

原创 ATL Internals 2ed复习.chapter 4.Debugging

ASSERT#ifndef ATLASSERT #define ATLASSERT(expr) _ASSERTE(expr)#endif 上述这个宏依赖CRT传输到debug outputinline void _cdecl AtlTrace(LPCST

2012-10-06 22:49:15 625

原创 ATL Internals 2ed复习.chapter 4.Creators

由于CreateInstance过程中需要调用FinalConstruct,用户很容易忘记,所以ATL提供了Creator类,这些类提供了一个静态函数static HRESULT WINAPI CreateInstance(void* pv, REFIID riid, LPVOID* ppv);CComCreatortemplate

2012-10-06 22:32:01 493

原创 ATL Internals 2ed复习.chapter 4.IUnknown

Standalone Reference Countingtemplate class CComObjectRootEx : public CComObjectRootBase中的类型定义:typedef ThreadModel _ThreadModel;typedef typename _ThreadModel::AutoCriticalSection _CritSec;t

2012-10-06 21:27:04 680

原创 ATL Internals 2ed复习.chapter 4.Thread

Instance Data SynchronizationCComCriticalSection:使用Init()生成,Term()销毁CComAutoCriticalSection:使用构造函数生成,析构函数销毁CComSafeDeleteCriticalSection:Init()生成,析构函数销毁CComAutoDeleteCriticalSection:未定义Term(),

2012-10-06 19:42:48 748

原创 ATL Internals 2ed复习.chapter 3.ATL Memory Managers

A Review of Windows Memory ManagementWindows有三种内存stack 栈:用于分配本地变量,大小在编译时确定,分配与释放仅需移动栈指针memory-mapped files 内存映射文件:不讨论heap 堆:用于分配动态变量,大小在运行时确定,使用heap manager进行分配和回收 在Windows中,每个进程启动时会分配一个de

2012-10-06 18:37:25 437

原创 ATL Internals 2ed复习.chapter 3.CAutoPtr

ATL提供了CAutoPtr, CAutoVectorPtr, CAutoPtrArray, and CAutoPtrList,它们具有类似auto_ptr功能,而没有抛出异常,并且不需要借助于CRT库。The CAutoPtr and CAutoVectorPtr Classes例子: STDMETHODIMP CMyClass::SomeFunc() { CFoo*

2012-10-06 17:30:23 595

原创 ATL Internals 2ed复习.chapter 3.CComGITPtr

Global Interface Table (GIT)提供了进程内interface共享机制,用户可以高效的在套间之间传递interface.使用GIT通常需要下面几步:1..源套间在GIT中注册interface,需要调用IGlobalInterfaceTable系统服务,取得一个cookieHRESULT RegisterMyInterface(IMyInterface* p

2012-10-01 22:23:52 635

原创 ATL Internals 2ed复习.chapter 3.CComPtr CComQIPtr

A Review of Smart Pointers使用smart pointers的好处:对象析构时,自动release interface发生异常时,创建在栈上的对象自动release interfaceassignment操作时,旧的interface自动release,新的interface自动AddRef提供不同的构造函数可以在大部分用raw pointer的地方

2012-10-01 21:55:09 804

原创 ATL Internals 2ed复习.chapter 3.CComSafeArray

template VARTYPE _vartype = _ATL_AutomationType::type>class CComSafeArray { ... public:

2012-10-01 19:05:17 649

原创 ATL Internals 2ed复习.chapter 3.SAFEARRAY

A Review of the COM SAFEARRAY Data Type为了在COM函数间传递Array参数,IDL定义了SAFEARRAY类型:interface IMyInterface : IUnknown { HRESULT GetArray([out,retval] SAFEARRAY(VARIANT_BOOL)*

2012-10-01 16:40:49 502

原创 boost::thread使用方法

首先调用thread的构造函数Default Constructor thread();Effects: Constructs a boost::thread instance that refers toNot-a-Thread. Throws: Nothing 解释:这个构造函数并不附加线程

2012-10-01 15:54:08 2330

原创 ATL Internals 2ed复习.chapter 3.CComVariant

在使用COM时,有时候用户不知道函数的输入参数,输出参数的具体类型。例如用户传入long类型,函数会把用户传入的long转换成自己想要的参数类型例如BSTR。其中起到关键作用的就是VARIANT类型VARIANT.vt==当前存储的数据类型VARIANT.(bVal,iVal,...,pvarVal,byref)==当前存储的数据 正确使用VARIANT需要注意:需要使用Var

2012-10-01 11:52:47 568

原创 ATL Internals 2ed复习.chapter 2

String Data Types, Conversion Classes, and Helper Functions对于字符串表示,不同的系统有不同的方法C/C++使用在字串末尾加NulVB,Java,Pascal在字串头部标识字串长度COM使用OLECHAR作为字符类型,COM的字符串为Nul结尾的OLECHARs,用LPOLESTR表示。如果向COM interface传递t

2012-09-28 10:53:30 601

原创 COM、ATL学习的几本书点评

Essential COM:中级教程我看的是En版,这种很艰深的书还是看原版的比较不容易走火入魔。作者Don Box现在好像成了.Net大佬,不过该书非常经典,美中不足的是有一些问题没有论述。书的末尾有一个例子,但是每一章没有实例,所以显得艰深。这个例子我没有实现。 COM技术内幕:初级教程只有中文翻译版,初学者可以看懂,基本没有什么内幕,建议看完后(或者不看)直接Essentia

2012-09-27 22:27:19 1183

原创 虚拟电子秤之Atl实现01

组件技术一直都想用一下,但是无奈技术门槛太高,为了项目进度需要不得不退而求其次,使用那些自己有把握的技术,大好青春浪费在了重复劳动之中。拜今年经济危机所赐,项目一下子少了许多,于是萌生了深入学习ATL的念头。众所周知,COM和ATL早已是昨日黄花,但是余威尚在,在工控领域和大多数商业软件都可以看到它们的身影,可以说是Windows平台编程技术的No1。工控领域大量用到串口设备,如485的模

2012-09-27 21:56:53 624

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除