摘要: idl文件相应位置写入 typedef [uuid(1B314975-2FCB-4903-BB1A-917EB8E639E4), version(1.0)] struct Struct_A { long x; long y; } Struct_A ;也就是说导出的结构体也必须有uuid 阅读全文
posted @ 2011-08-11 15:19 银翼的魔术师 阅读(215) 评论(0) 推荐(0) 编辑
摘要: String str(newVal); int count = str.size(); if(count>31) { count = 31; } wcsncpy(m_info.faceName,str.c_str(),count); m_info.faceName[count] = _T('\0'); 阅读全文
posted @ 2011-08-11 15:18 银翼的魔术师 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 有IMXLayer和IMXVectLayer两个接口 已经实现了IMXVectLayer继承于IMXLayerIMXVectLayer的实现是我自己写的,IMXLayer的实现是系统生成的 1 STDMETHODIMP CMXLayers::GetLayer(LONG idx, IMXLayer** layer) 2 { 3 4 CMXLayer *mxLayer = NULL; 5 switch (pLayer->GetLayerType()) 6 { 7 case miLayerVector: 8 mxLayer = (CMXLayer *)new CComObject<CMX 阅读全文
posted @ 2011-08-11 15:16 银翼的魔术师 阅读(309) 评论(0) 推荐(0) 编辑
摘要: b.any() b 中是否存在置为 1 的二进制位?b.none() b 中不存在置为 1 的二进制位吗?b.count() b 中置为 1 的二进制位的个数b.size() b 中二进制位的个数b[pos] 访问 b 中在 pos 处二进制位b.test(pos) b 中在 pos 处的二进制位置为 1么?b.set() 把 b 中所有二进制位都置为 1b.set(pos) 把 b 中在 pos 处的二进制位置为 1b.any() b 中是否存在置为 1 的二进制b.reset() 把 b 中所有二进制位都置为 0b.reset(pos) 把 b 中在 pos 处的二进制位置b.flip() 阅读全文
posted @ 2011-08-11 15:14 银翼的魔术师 阅读(105) 评论(0) 推荐(0) 编辑
摘要: vector<int> int_vector(10); vector<int>::iterator int_iterator; for (int_iterator = int_vector.begin();int_iterator!=int_vector.end();++int_iterator) { *int_iterator = 1; } for (int_iterator = int_vector.begin();int_iterator!=int_vector.end();++int_iterator) { cout<<*int_iterator&l 阅读全文
posted @ 2011-08-11 15:13 银翼的魔术师 阅读(109) 评论(0) 推荐(0) 编辑
摘要: string 对象和 bitsets 对象之间是反向转化的:string 对象的最右边字符(即下标最大的那个字符)用来初始化 bitset 对象的低阶位(即下标为 0 的位)。当用 string 对象初始化 bitset 对象时,记住这一差别很重要。警告:为什么在vs下是正向的呢?我勒个去 阅读全文
posted @ 2011-08-11 15:13 银翼的魔术师 阅读(244) 评论(0) 推荐(0) 编辑
摘要: VariantClear(Value); 阅读全文
posted @ 2011-03-23 12:46 银翼的魔术师 阅读(173) 评论(0) 推荐(0) 编辑
摘要: BOOL (WINAPI *pfnGetProcessDEPPolicy)(HANDLE hProcess, LPDWORD lpFlags, PBOOL lpPermanent);BOOL (WINAPI *pfnSetProcessDEPPolicy)(DWORD dwFlags);(FARPROC&)pfnGetProcessDEPPolicy = GetProcAddress(GetModuleHandle(_T("kernel32")), "GetProcessDEPPolicy");(FARPROC&)pfnSetProces 阅读全文
posted @ 2011-03-23 12:45 银翼的魔术师 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 可以在控件的IDL文件中编写代码,见彩色部分代码。import "oaidl.idl";import "ocidl.idl";[object,uuid(A0A2E087-0A96-4861-BED2-549F9A0AC2C2),dual,nonextensible,helpstring("IHLMe... 阅读全文
posted @ 2011-03-23 12:45 银翼的魔术师 阅读(376) 评论(0) 推荐(1) 编辑
摘要: STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal){CComBSTR sResult( s1 );sResult.AppendBSTR( s2 );*pVal = sResult.Copy();// *pVal = sResult.Detach();return S_OK;} 阅读全文
posted @ 2011-03-23 12:44 银翼的魔术师 阅读(119) 评论(0) 推荐(0) 编辑
摘要: VARIANT C++、BASIC、Java、Pascal、Script......计算机语言多种多样,而它们各自又都有自己的数据类型,COM 产生目的,其中之一就是要跨语言(注3)。而 VARIANT 数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。从C语言的角度来讲,VARIANT 其实是一个结构,结构中用一个域(vt)表示------该变量到底表示的是什么类型数据,同时真正的数据则存贮在 union 空间中。结构的定义太长了(虽然长,但其实很简单)大家去看 MSDN 的描述吧,这里给出如何使用的简单示例:学生:我想用 VARIANT 表示一个4字节长的整数,如何做?老师 阅读全文
posted @ 2011-03-23 12:44 银翼的魔术师 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 1、函数 WideCharToMultiByte(),转换 UNICODE 到 MBCS。使用范例: LPCOLESTR lpw = L"Hello,你好"; size_t wLen = wcslen( lpw ) + 1; // 宽字符字符长度,+1表示包含字符串结束符 int aLen=WideCharToMultiByte( // 第一次调用,计算所需 MBCS 字符串字节长度 CP_ACP, 0, lpw, // 宽字符串指针 wLen, // 字符长度 NULL, 0, // 参数0表示计算转换后的字符空间 NULL, NULL); LPSTR lpa = new 阅读全文
posted @ 2011-03-23 12:43 银翼的魔术师 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 一个类如果想被com容器使用,则必须继承于CComObjectRootEx和CComCoClass,示例class ATL_NO_VTABLE CCMXLayers :public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CCMXLayers, &CLSID_CMXLayers>,public IDispatchImpl<ICMXLayers, &IID_ICMXLayers, &LIBID_MapObjectLib, 1, 0>{普通的类是无法被容器使用的 阅读全文
posted @ 2011-03-23 12:43 银翼的魔术师 阅读(171) 评论(0) 推荐(0) 编辑
摘要: API:PathAddBackslash Function这个API个人感觉太简单了。。。就是在字符串的最后加一个反斜杠ASSERT( m_szAppName[0] == _T('\0') );_tcsncpy(m_szAppName, pszAppName, _countof(m_szAppName) - 1);m_szAppName[_countof(m_szAppName) - 1] = _T('\0');// eMule may not have the permission to create a DMP file in the directory w 阅读全文
posted @ 2011-03-23 12:42 银翼的魔术师 阅读(283) 评论(0) 推荐(1) 编辑
摘要: UpdateData()参数只有一个,默认为TRUE。 UpdateData(TRUE) ——刷新控件的值到对应的变量。 即:控件的值—>变量。 UpdateData(FALSE) —— 拷贝变量值到控件显示。 即:变量值—>控件显示。 例如,窗口中用 DDX_Text(pDX, IDC_EDIT1, m_usercode); 将IDC_EDIT1编辑框控件与m_usercode变量做了关联,如果修改m_usercode之后要想对应控件显示更改,则需要调用UpdateData(FALSE);反之在IDC_EDIT1的oneditchanged()中需要加入UpdateData(TR 阅读全文
posted @ 2011-03-23 12:42 银翼的魔术师 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法: 编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。 但有时候还是必须用 Include 头文件,那么,两者的划分在于什么呢? 应该是很明确的,但书上好像都少有提及。 首先: 我们要明白为什么要用声明取代头文件包含:对了,是为了避免无必要的重编译 ( 在头文件发生变更时 ) 。 工程较大,低速机,或基础类经常变更 ( 不合理的设计吧 ) , 阅读全文
posted @ 2011-03-23 12:41 银翼的魔术师 阅读(207) 评论(0) 推荐(0) 编辑
摘要: mitab_c_set_field给图元添加属性时如果mitab_c_add_field(tabHandle,"ID",TABFT_Char,20,0,0,1);然后char ID[20];sprintf(ID,"%d",nIndex);mitab_c_set_field(fs,0,ID);如果nIndex=0 则创建不成功 可能mitab_c_set_field把"0"当做空串来处理了 阅读全文
posted @ 2011-03-23 12:40 银翼的魔术师 阅读(167) 评论(0) 推荐(0) 编辑
摘要: CGuardRouteBar *pParent = (CGuardRouteBar *)GetParent();//这一句是错误的 因为分割视图 GetParent()的不到正确的将路线的编号传入RouteDetailView视图if(!pParent){AfxMessageBox(_T("程序错误!"));return;}CGuardRouteBar中代码为。。。public:CSplitterWndExm_splitter;CGuardRouteView *m_routeView;CGuardRouteView* GetRouteView(void);CGuardRou 阅读全文
posted @ 2011-03-23 12:39 银翼的魔术师 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 张文涛个人中心好友消息退出张文涛退出让你的微博变成经典语录 发博文 博文 张文涛的博客[编辑]http://blog.sina.com.cn/u/1242973553 首页 博文目录 图片 关于我发博文页面设置个人中心微语录九宫格发照片发视频个人资料 [管理] 张文涛播客 微博博客等级:博客积分:204博客访问:227关注人气:0相关博文 帮你把点滴想法汇聚成文新浪官博MSN搬家新浪总动员新浪博客团队现在FQ和小时候FQ的区别刘兴亮女人让男人更着迷的秘密(图健康天使3月23日股市直播徐湘毅MSN的盗梦空间——写在MS康斯坦丁一头毛驴引发的公关风波:赶集猎头哲瀚社会化媒体营销与品牌传播快刀洪七谁 阅读全文
posted @ 2011-03-23 12:06 银翼的魔术师 阅读(558) 评论(0) 推荐(0) 编辑
摘要: CRuntimeClass* pViewClass = RUNTIME_CLASS (CGuardRouteDetailFormView);CView* pView = DYNAMIC_DOWNCAST (CGuardRouteDetailFormView, pViewClass->CreateObject ());m_guardRouteDetailView = (CGuardRouteDetailFormView* )pView;ASSERT_VALID (pView);if (!pView->Create (NULL, _T(""), WS_CHILD | 阅读全文
posted @ 2011-03-23 12:05 银翼的魔术师 阅读(288) 评论(0) 推荐(0) 编辑