Visual C++

linux 动态库编译:.so: undefined symbol

 这几天学习了下共享库相关知识,今天编码发现一点小问题(虽然是小问题,也花了几个小时查找),这里记录下,给大家作个参考。 1、问题描述 g++编译库文件,编译的时候不报错,但是运行主程序的时候会出现以下错误: /opt/code/c++/sharelib/libshare.so: undefined symbol: my_print 1 2、解决方案 编译共享库的时候,一定要以C的方式进行编译。 纯C代码,可直接用gcc编译; C++代码,需将对外暴露的接口(即外部可以直接调用的接口)以C方式编译,即使用extern "C" { 代码 }。 3、代码实例 共享库 sharelib.cpp: 编译:g++ -o libshare.so -fPIC -Wall -shared sharelib.cpp include <stdio.h> #include <iostream> extern "C" //“my_print”是该共享库提供的对外接口,所以需...

跨平台c++/boost/asio 简单的HTTP POST请求 客户端模型

 作为一个呼应,写一个c++版本的同步http post客户端功能,如果你需要纯C版本,移步这里 linux下纯C简单的HTTP POST请求 客户端模型 讲解一下基本的的http post协议 通过\r\n,实现tcp的消息边界 每个请求的第一段 POST /a.b HTTP/1.1 POST http的方法,还有最常用的GET,当然还有其他的几种,略过 /a.b 请求的网页路径,比如如果是首页,最经常的就是/ HTTP/1.1 http协议的版本号,传说中已经出了2了,还有神奇的谷歌出的用来替代http协议的SPDY 通过这条信息表明这是一个表单 Content-Type: application/x-www-form-urlencoded 通过这条信息来表示这次httppost 的包体长度,非必需项 Content-Length:12 然后就是一个空行,代表接下来都是包体 刚才是请求,谈一下响应就更简单了 响应内容 HTTP/1.1 200 OK 200就是传送中的状态,404没找喔等等 HTTP/1.1 表示http的版本号 当然,如...

C++读写windows剪贴板的内容

 // 复制数据至剪切板 BOOL CopyToClipboard(const char* pszData, const int nDataLen) { if(::OpenClipboard(NULL)) { ::EmptyClipboard(); HGLOBAL clipbuffer; char *buffer; clipbuffer = ::GlobalAlloc(GMEM_DDESHARE, nDataLen+1); buffer = (char *)::GlobalLock(clipbuffer); strcpy(buffer, pszData); ::GlobalUnlock(clipbuffer); ::SetClipboardData(CF_TEXT, clipbuffer); ::CloseClipboard(); return TRUE; } return FALSE; } // 从剪切板中取得数据 BOOL GetTextFromClipboard() { if(::OpenClipboard(NULL)) { ...

Chromium与CEF的多进程模型及相关参数

 CEF基于Chromium,也是多进程模型。关于进程模型,参考这里:https://www.chromium.org/developers/design-documents/process-models。我还看到一篇韩国人写的renderer process的文章,也很不错,在这里:http://chromium-kr.blogspot.com/2012/06/about-renderer-process.html。 CEF的进程模型,这里也有一部分描述:https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage。CEF3默认使用multiple processess,CEF1默认支持较为稳定的的单进程模型。 Chromium的进程分为好几类(content/public/common/content_switches.cc中有进程参数定义,content/app/content_main_runner.cc中对不同进程做了分支处理): browser(没有type参数时默认为browser进程...

cef3加载flash闪烁问题非easyhook的另外一种解决方法

 1.现象 cef3加载flash,会出现弹出命令行窗口,显示not sandboxed,影响使用体验。 网上的解决方法,参考此文。 http://blog.csdn.NET/zx2356/article/details/51514403 按照该文及提供的下载挂钩createProcessA,在xp上无效。 2.解决方法 有可能createprocessw也得挂钩。但懒得修改了。因此决定改为反编译flash插件,看看显示命令行窗口的逻辑。 反编译flash插件。发现显示cmd的逻辑是,读取环境变量comspec(cmd.exe的全路径),读取到就执行它,读取不到执行cmd.exe. 用winhex修改flash插件,搜索comspec为soms1ec,修改cmd.exe为cm1.exe. 重新测试,成功。

在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)

  之前把离屏渲染模式的Cef3作为控件嵌入到项目窗体里。现在因为工作需要,为了得到支持mp3、mp4的cef32和64位版本,我得编译cef3的2623版本(最后一个支持xp的cef)。没编译之前就知道这是个大坑,果不其然,花了一星期才编译出来。看了不少网上的教程,感觉没有特别完整的,特地把自己的编译过程记录下来,以备后用。 需要专门吐槽一下中国防火墙,一星期中有5天我都花在了翻墙下载代码中。git还不支持断点续传,网络不稳定的话检出代码能气死人啊!!! 准备 快速稳定的VPN(非常重要,免费的VPN不靠谱,最好花钱买个VPN或者公司有稳定的翻墙。我公司自带翻墙,但是有几个代码检出地址有些问题,导致我检出了5天才下载好代码。这个条件打不到就别指望成功了) Win7或者更新的系统,必须64位 VS2013 Update4(编译不同版本要求不一样,具体看Cef官网帮助,我用的是VS2013 Update5) Win10 SDK 60G剩余空间(用SSD最好,编译速度很依赖CPU和硬盘) 下载Python并添加...

error C2220: 警告被视为错误 – 没有生成“object”文件

 这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。 解决方案: 1. 启动Microsoft Visual Studio 2005,文件->打开->选择该cpp,然后保存。从新打开程序文件运行,此错误不再出现。 如果不行, 则 2 2. 如果上述不能去掉错误,还可以点击项目,右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”。就可以! 试了第一种方法无效,第二种方法有效果但是忽略掉了警告。

C++ WebBrowser控件的内存释放

 接上文,内嵌了一个webbrowser,当窗口关闭后,内存会持续占用并不会释放。 C++释放WebBrowser控件内存代码: HANDLE pHandle = GetCurrentProcess(); SetProcessWorkingSetSize(pHandle, -1, -1);   解决办法来源:http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8/ [DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)] internal static extern bool SetProcessWorkingSetSize(IntP...

c++修改WebBrowser进程User-Agent(ua)信息

 用WebBrowser封了一个自己的个性浏览器,想修改访问者的User-Agent 信息,尝试了几种方式,包括拦截相关事件,手动增加ua信息,都不怎么理想,最后找到可以通过系统函数设置整个进程的UA信息,下面分享出来。 导入这个lib urlmon.lib; #include <Urlmon.h> std::string sUserAgent="my useragent"; UrlMkSetSessionOption(URLMON_OPTION_USERAGENT,(char *)sUserAgent.c_str() ,sUserAgent.size(), 0);

c++ Smtp, Pop3, Imap Library (for C++ and .NET) vmime

With this project, C++ and .NET Windows programmers get a very versatile library to send and download emails via SMTP, POP3 and IMAP with TLS and SSL support. Downloads Vmime.NET_All.rar (9 MB): The entire project with all files required to compile for 32 Bit platform. Vmime.NET_64.rar (6 MB): Only a few additional files required to compile for 64 Bit platform. Summary With this project, C++ and .NET Windows programmers get a very versatile li...