Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

#

之前一直要该tlb文件,或者修改生成之后的文件,结果总是有问题,果然VC牛逼啊,,,
今天到网上看到终极方案了,确实是有效的

解决办法如下:
    UIFlash.h
  行:#import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids
  
  改为:
  #import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids, rename("IDispatchEx","IMyDispatchEx")
  可以解决以上的题目。
  
  为了兼容性更好,防止体系flash的插件更新后又有题目,干脆直接导入你本身体系的OCX,于是将这一行最好改为:
  #import "PROGID:ShockwaveFlash.ShockwaveFlash"      raw_interfaces_only,       /* Don""t add raw_ to method names */     named_guids,           /* Named guids and declspecs */        rename("IDispatchEx","IMyDispatchEx") /* fix conflicting with IDispatchEx ant dispex.h */  

来了第二种姐姐方案:
在UIWebXXXX.h 和.cpp中,把cpp的头文件移动到h里边,可能是<ExDisp.h>里边一些宏在起作用

#include <mshtml.h>
#include <atlconv.h>
#include <atlcomcli.h>
#include "Utils/WebBrowserEventHandler.h"
#include <ExDisp.h>
----------------------------------------------------
#include "../Utils/downloadmgr.h"
posted @ 2014-02-17 19:47 Enic 阅读(934) | 评论 (0)编辑 收藏

// filename: IRenderTarget.h
// author: enic
// date: 2014-02-12
#pragma once
#include "import_std.h"
namespace elib
{
class IRenerTarget
{
public:
virtual ~IRenerTarget(){}
        // !!!这里原先的名字和Windows sdk中的DrawText,结果上当了。表现在基类定义的DrawText接口,派生类始终调用不到
        // 正确的class,感觉是虚函数表查的不对,后来发现泥马明明函数名字都是DrawText结果派生类调用DrawTextW编译器都不
        // 报错误,然后把基类的改了还居然就正常了,,,
        // 最后发现是被windows sdk的UNICODE模式那些×××W ***A的宏忽悠了,然后编译器这边也没能报错出来,导致运行期间找
        // 不到正确的虚函数然后傻逼了。
        // 解决方案有两个:1.在基类中也引入Windows的头文件,这样大家一起被宏定义,始终是一致的名字。但是感觉不太好,仿
        // 佛被绑架了一样,我不喜欢这个感觉。而且不利于跨平台(总觉得编译器不够给力,应该报出来的)。或者是undefine,
        // 或者把导致问题的依赖文件移动到cpp中,这样应该报错会明显一点不至于到最后崩溃了无法分析(宏展开才能发现代码问题)
        // 2.该名字,果断改了,,,以后windows api中有×××W ***A两个版本的,果断要记得危险,,,
virtual bool DrawString(const estl::u16string& strText, int iX, int iY) = 0;
};
class CBaseRenderTarget : public IRenerTarget
{
public:
virtual bool DrawString(const estl::u16string& strText, int iX, int iY)
{
return false;
}
};
/*
class IRenderTexture
{};*/
};  //~ end of namespace elib


// filename: CDcRenderTarget.h
// author: enic
// date: 2014-02-13
// note:
//  @2014-02-14:现在最纠结的事情是,怎么在PaintEvent的时候获取到RenderTarget,目前只能确定一件事:
//               只有从NativeWnd才能获取到DC,才可能创建出真实的RenderTarget,那么创建就只交给NativeWnd
//               然后通过Paint事件传递出去.
//               仔细想想,发现上面说的方式也不行,上面的方式限制了paint的时机,也就是只有发生Paint事件
// 的时候才有可能得到Target然后绘图,貌似不够合理?下午想想有没有别的办法。
#pragma once
#include "../IRenderTarget.h"
#include "CDCT.hpp"
namespace elib
{
    // DC渲染目标
    class CDcRenerTarget : public CBaseRenderTarget
    {
    public:
        explicit CDcRenerTarget(CDCHandle dc);
virtual ~CDcRenerTarget();
    public:
        virtual bool DrawString(const estl::u16string& strText, int iX, int iY);
    private:
        CDCHandle m_dcHandle;
    };
};  //~ end of namespace elib
posted @ 2014-02-15 20:39 Enic 阅读(422) | 评论 (0)编辑 收藏

开始使用boost::asio库时,编译碰到这个错误提示:

fatal error C1189: #error :  WinSock.h has already been included

查了下抛出这个错误的boost代码,原来是定义了_WINSOCKAPI_,但没有定义_WINSOCK2API_

那哪里定义了_WINSOCKAPI_呢?

后来在网上查了下,原来是我包含了Windows.h头文件,而Windows.h头文件又包含了WinSock.h这个老东西

知道原因就简单了,试了下,方法有三种可解决此错误:

1、在包含Windows.h前定义宏WIN32_LEAN_AND_MEAN,就OK了(WIN32_LEAN_AND_MEAN表示不包含一些极少使用和偏门的资料)

2、在包含Windows.h前包含winsock2.h

3、在包含Windows.h前包含asio.hpp

posted @ 2014-02-14 11:53 Enic 阅读(507) | 评论 (0)编辑 收藏

面试:
1、面试心态要好,要知道,最终决定你的去留的绝对不是一个问题没答上来——谁敢说自己都涉猎?
2、遇到不好回答的问题要有技巧,比如下面的几个方式:
  A、如果是比较开放的话题,可以说,感觉您这个问题很好,很有深度,我之前真没有仔细考虑过。
  B、这个方面我了解不多,我觉得可以从几个方面考虑会可能有助于解决问题。或者,这个我了解不多,感觉应该是××方式或者××方式或者是××方式实现的。注意,一般要说两到三个方向。
  C、如果你回答的他说不对,一般可以问,这个我回去会仔细研究了解一下,您能否指点一个大致的方向。
3、只要大部分基础知识OK就行。
4、要表现出你对程序的激情、狂热,以及对程序的悟性。
5、如果你能在他们所需要的行业知识或专业知识上能讲个差不多,基本这事就成了。



留下:
1、技术上有相当大的进步空间,有人带。
2、开放流程的规范化上,项目框架、思想方面有进步空间——根据你的描述情况,估计没有。
3、能往上走一个级别。
4、这个行业发展前景极好
5、公司在预计的未来两三年能看得到能高速增长。
posted @ 2014-02-12 17:38 Enic 阅读(281) | 评论 (0)编辑 收藏

http://fangshunbao.blog.sohu.com/262524808.html
posted @ 2014-02-10 20:09 Enic 阅读(627) | 评论 (0)编辑 收藏

#include <boost/locale.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
//std::locale::global(std::locale("utf-8"));
std::locale::global(std::locale(""));  // 设置全局的C运行库locale  可以针对cout  fstream等单独设置 空表示默认使用当前系统字符集
std::string strGbk = "天朝的方式开发刻录机卡洛斯分123qwerwer繫";
std::wstring wstr = boost::locale::conv::to_utf<wchar_t>(strGbk, "gbk");
std::string strA = boost::locale::conv::from_utf(wstr, "GBK");
std::cout << strGbk.c_str() << std::endl;
std::wcout << wstr.c_str() << std::endl;
std::cout << strA.c_str() << std::endl;
try
{
std::string strBit5;
strBit5 = boost::locale::conv::between(strA, "big5", "gbk");
strA = boost::locale::conv::between(strBit5, "GBK", "BIG5");
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
catch (...)
{
std::cout << "..." << std::endl;
}
std::cout << __FUNCTION__ << std::endl;
return 0;
}
posted @ 2014-02-09 12:34 Enic 阅读(3559) | 评论 (0)编辑 收藏

以前一直没留意:

template<typename TCon>
void StlClear(TCon& refCon)
{
    TCon con;
    con.swap(refCon);
}
posted @ 2014-01-25 11:09 Enic 阅读(483) | 评论 (0)编辑 收藏

1.MFC中支持半透明button子控件
以前一直觉得MFC中是不可能实现半透明子控件,或者透明子空间只能通过setrgn实现的,结果发现微软没有这么傻逼。在窗口属性中有三个决定这个特性的三个属性:WS_CHILD  WS_CLIPCHILDREN  WS_CLIPSIBINDGS

2.C++异常堆栈追踪
出了谷歌那一套还有libcsdbg  addr2line
posted @ 2014-01-24 10:18 Enic 阅读(480) | 评论 (0)编辑 收藏

//刷新
void CTaskerDlg::Refresh()
{
DWORD NewProcessID[200];
int NewProcessTotal;
//获得所有ID
DWORD  cbNeeded;
if ( !EnumProcesses( NewProcessID, sizeof(NewProcessID), &cbNeeded ) )  //receive all the Process ID Saved in aProcesses
{::MessageBox(NULL,TEXT(""),TEXT("Can not EnumProsses"),0);return;}
NewProcessTotal = cbNeeded / sizeof(DWORD); //the total of Process ID
//假如没有ID总数没有变化,则无需更新列表
if (NewProcessTotal==OldProcessTotal)
return;
//全部清除
m_list.DeleteAllItems();
m_imagelist.DeleteImageList( );
//设置图标
m_imagelist.Create(16,16,ILC_COLORDDB,2,2); //创建CImageList 16,16是图标的大小
m_list.SetImageList(&m_imagelist,LVSIL_SMALL);//把CListCtrl中的CImageList联   
int nItem=0;
HANDLE hProcess = NULL; //进程句柄
TCHAR szProcessName[MAX_PATH] ={0}; //进程的名称
TCHAR szProcessPath[MAX_PATH] ={0}; //进程路径
HMODULE hMod=NULL; //进程的第一个模块
    DWORD ModulecbNeeded; //储存进程模块的大小
SHFILEINFO stFileInfo;
char buf[10];
for (int i = 0; i < NewProcessTotal; i++ )
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE, NewProcessID[i]);//get the handle of every Process which is Indentified by Process ID
        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &ModulecbNeeded) ) // 列举某个进程的模块,第一个模块就是创建此进程的主exe程序 
{
if (    GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ) //获得程序名
    && GetModuleFileNameEx( hProcess, hMod, szProcessPath, sizeof(szProcessPath))  )//获得模块路径
{
//获取图标
:: SHGetFileInfo(szProcessPath,0, &stFileInfo,sizeof(stFileInfo),SHGFI_ICON|SHGFI_SMALLICON ); //添加图标到m_imagelist (CImageList m_imagelist)
//向m_imagelist添加图标
int n=m_imagelist.Add(stFileInfo.hIcon);
//把程序名,路径,进程ID添加到ClistCtrl
m_list.InsertItem(nItem, szProcessName,n);//插入1行"11"代表第0列的数据 参数(行数,标题,图标索引)
m_list.SetItemText(nItem, 2, szProcessPath);
//更新Processdata[nItem].ID
Processdata[nItem].ID=NewProcessID[i];
//更新进程CPU使用率
m_list.SetItemText(nItem, 1, itoa( GetProcessUsage(&Processdata[nItem]) ,buf,10) );
//改变nItem
nItem++;
}
}
CloseHandle(hProcess);
}
//更新OldProcessID
OldProcessTotal=NewProcessTotal;
}
//删除进程
void CTaskerDlg::OnDeleteProcess() 
{
//获得选中的行
int nItem;
POSITION   pos   =   m_list.GetFirstSelectedItemPosition();   
if   (pos   !=   NULL)   
        while   (pos)   
nItem=m_list.GetNextSelectedItem(pos);   
//关闭进程
HANDLE hProcess = OpenProcess(  PROCESS_TERMINATE, FALSE, Processdata[nItem].ID );
if( NULL != hProcess )
{
if(IDOK==MessageBox("确定要删除此进程吗?","提示",MB_OKCANCEL) )
{
if( TerminateProcess( hProcess, 0 ) )
{
CloseHandle( hProcess );
//删除CListCtrl上的项
m_list.DeleteItem(nItem);
}
else
MessageBox("不能结束进程!");
}
else 
CloseHandle(hProcess);
}
}
posted @ 2014-01-16 00:11 Enic 阅读(295) | 评论 (0)编辑 收藏

将boost更新到1.53时, 发现luabind死活编译不过, 报错如下

error: missing binary operator before token "("

根据老外的描述, boost中的BOOST_PP_ITERATION_FLAGS从1.49版本后发生了一些变化.

在git找到一个patch, 链接在此

以下简单描述

修改call_function.hpp, call_member.hpp及wrapper_base.hpp

去掉#elif BOOST_PP_ITERATION_FLAGS() == 1

更换为

#else

#if BOOST_PP_ITERATION_FLAGS() == 1

然后在源码底部加一个#endif即可

posted @ 2014-01-15 14:42 Enic 阅读(367) | 评论 (0)编辑 收藏

仅列出标题
共22页: First 8 9 10 11 12 13 14 15 16 Last