玩心未泯

卡尔斯希普拉斯

C++博客 首页 新随笔 联系 聚合 管理
  19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
后来发现在Mobile5上,注册表结构发生了变化
HKLM\Software\Microsoft\ConnMgr\Providers\{7C4B7A38-5FF7-4bc1-80F6-5DA7870BB1AA}\Connections
变成了
HKLM\Comm\ConnMgr\Providers\{7C4B7A38-5FF7-4bc1-80F6-5DA7870BB1AA}\Connections
而且连接的键值中多了一个GUID,目前还不知道如何生成或者获取的。
re: C++ 类成员的CALLBACK SuperPlayeR 2007-08-21 09:51
其实主要是使用了.*或者是-〉*操作符的表达式。
re: 线程互斥执行之假死锁现象 SuperPlayeR 2007-08-13 15:23
最后的总结第二点,应该说是尽量减少互斥锁保护范围内代码的执行时间。减少对慢速IO设备的访问其实目的只是缩短时间而已。
re: 对研发部的思考 SuperPlayeR 2007-08-13 11:24
@SmartPtr
不少优秀的IT企业在浦东不假,不过我目前已经搬家到浦西长桥一村那个偏僻的地方了,这也是我目前很头疼的原因之一。还是想要住回浦东去啊,什么都方便。
一个朋友研究了在smartphone上建立GPRS拨号连接的情况,贴出一些代码供需要的朋友参考:
http://cpp.sourceforge.net/?show=39205

怕这个链接以后会失效,我还是先copy一份过来。

#include "stdafx.h"

#include <wchar.h>

#include <tapi.h>
#include <tsp.h>

#include <ras.h>
#include <raserror.h>

#include <vector>

DWORD FindCellLine()
{
LONG lRet = 0;
DWORD dwDeviceNum = 0;
DWORD dwDeviceID = -1, dwTapiVersion = TAPI_CURRENT_VERSION;

HLINEAPP hLineApp = NULL;

LINEINITIALIZEEXPARAMS initParams = {0};
initParams.dwTotalSize = sizeof(initParams);
initParams.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;

std::vector<char> buffer(1024, '\0');
LPLINEDEVCAPS devcaps =(LINEDEVCAPS*) &buffer[0];

devcaps->dwTotalSize = buffer.size();

lRet = lineInitializeEx(&hLineApp, GetModuleHandle(NULL), NULL,
L"GPRS Device Finder", &dwDeviceNum, &dwTapiVersion, &initParams);

if (lRet != 0)
return -1;

for(DWORD dwDeviceIndex = 0; dwDeviceIndex != dwDeviceNum; dwDeviceIndex++)
{
lineGetDevCaps(hLineApp, dwDeviceIndex, dwTapiVersion, 0, devcaps);

if (devcaps->dwNeededSize > devcaps->dwTotalSize)
{
buffer.resize(devcaps->dwNeededSize);
devcaps =(LINEDEVCAPS*) &buffer[0];
devcaps->dwTotalSize = buffer.size();

dwDeviceIndex--;
continue;
}

if (wcscmp((LPCTSTR) &buffer[devcaps->dwLineNameOffset],
CELLTSP_LINENAME_STRING) == 0)
{
dwDeviceID = dwDeviceIndex;
break;
}
}

lineShutdown(hLineApp);

return dwDeviceID;
}

BOOL SetupGprsRasEntry(LPWSTR szEntryName, LPCWSTR szAccessPointName)
{
DWORD dwLineID = 0;
std::vector<char> buffer(sizeof(VARSTRING) + sizeof(CELLDEVCONFIG), '\0');

LPVARSTRING varbuffer =(LPVARSTRING) &buffer[0];
varbuffer->dwTotalSize = buffer.size();

LPCELLDEVCONFIG cellcfg = NULL;

{//查找Cell Line的设备ID
if ((dwLineID = FindCellLine()) == -1)
return FALSE;
}

{//获得默认数据配置
if (lineGetDevConfig(dwLineID, varbuffer, L"comm/datamodem") != 0)
return FALSE;

cellcfg =(LPCELLDEVCONFIG) &buffer[varbuffer->dwStringOffset];
}

{//开始配置GPRS数据
cellcfg->bGPRSConnectionInfoValid = TRUE;

memset(&cellcfg->cgciGPRSConnectionInfo, 0x00,
sizeof(cellcfg->cgciGPRSConnectionInfo));

wcscpy(cellcfg->cgciGPRSConnectionInfo.wszAccessPointName, szAccessPointName);

cellcfg->cgciGPRSConnectionInfo.dwProtocolType = CELLDEVCONFIG_GPRSPROTOCOL_IP;
cellcfg->cgciGPRSConnectionInfo.dwL2ProtocolType = CELLDEVCONFIG_GPRSL2PROTOCOL_PPP;
cellcfg->cgciGPRSConnectionInfo.dwDataCompression = CELLDEVCONFIG_GPRSCOMPRESSION_OFF;
cellcfg->cgciGPRSConnectionInfo.dwHeaderCompression = CELLDEVCONFIG_GPRSCOMPRESSION_OFF;
}

{//安装GPRS拨号项
RASENTRY rsaentry = {0};

rsaentry.dwSize = sizeof(rsaentry);
rsaentry.dwfOptions = RASEO_ProhibitEAP|RASEO_RemoteDefaultGateway;
rsaentry.dwfNetProtocols = RASNP_Ip;
rsaentry.dwFramingProtocol = RASFP_Ppp;

wcscpy(rsaentry.szDeviceName, CELLTSP_LINENAME_STRING);
wcscpy(rsaentry.szDeviceType, RASDT_Modem);
wcscpy(rsaentry.szLocalPhoneNumber, L"~GPRS!");

if (RasSetEntryProperties(NULL, szEntryName, &rsaentry, sizeof(rsaentry),
(LPBYTE) cellcfg, sizeof(*cellcfg)) != 0)
return FALSE;
}

return TRUE;
}

re: 探索Heap Corruption SuperPlayeR 2007-08-02 19:52
@学习者
呵呵~~这个错误就是内存溢出了。试想在Release版本下没有了这些信息,存放在内存中的都是有用的数据,一个10Byte数据可能是你的一个数组,其后跟着另外一个数据,而你写入超过10Byte的数据不就把后面的数据给覆盖掉了么?
re: 向Pane、Splitter前进 SuperPlayeR 2007-08-02 19:45
不错~用的是自己开发的界面库吧。
唉,InfoSys~~~~~
re: 几种peer review的比较 SuperPlayeR 2007-08-02 15:18
这个有意思多了。
re: Peer Review 该如何翻译 SuperPlayeR 2007-08-02 15:16
我的意思是放着大把的好东西不研究,咬文嚼字起来了有点过了。
re: Peer Review 该如何翻译 SuperPlayeR 2007-08-02 10:56
有点过了~
一个人、大半年
有多高的生产力?
貌似从发文到现在又有半年时光了~
re: 用c++,写小型病毒 SuperPlayeR 2007-08-02 09:57
这只能算是恶作剧。
re: WinCE下驱动开发入门记录(三) SuperPlayeR 2007-08-02 09:37
昨晚上睡觉之前顺手把一本买了很久却一直没看的书拿起来翻了翻,linux设备驱动程序,看了看关于usb驱动的章节,发现当初如果刚开始研究的时候就看看这个,可能会少走不少弯路,至少什么是Configuration,什么是Interface,什么是EndPoint它都介绍清楚了~:P
今天如果有时间,我继续写(四),介绍一下。
re: 关于GOOF的bug问题 SuperPlayeR 2007-07-17 11:29
原来博主是搞游戏开发的。GOOF我没读过,不过第一个bug的确不是bug,可能博主自己理解错误了。其他的几个光看博主贴出来的片断也看不出个所以然来。
re: 学习WinCE下的驱动开发 SuperPlayeR 2007-07-16 15:19
hoho~难得付前辈还来我blog上踩个脚印,蓬荜生辉啊~就是不知道是不是真的。
不理解你也不行~总的找个法子宽慰自己才能继续安心学习啊,不然老在那里郁闷、抱怨,还是进步不了啊~老前辈有空的话还是给我指点指点,虽然公司现在把驱动外包出去给别的公司作,而我自己的项目又忙得一塌糊涂,但是我还是对驱动开发很感兴趣的。
re: 中国职员的九种劣根性 SuperPlayeR 2007-07-13 11:34
照下自己确实有不少这样的毛病,受教了,以后要多多自省。
re: VS9中C++少得可怜的更新 SuperPlayeR 2007-07-13 11:30
路是自己走的嘛~~博主也不必担心以后的学习者不知道指针是什么了,因为编程语言毕竟还只是一种工具,他不知道指针是什么,只要他的程序能够很好的达到目的就行了。另一方面我们也可以认为他们不知道指针是什么的学的就不再是C++了~:P或许不久的将来,微软就会给自己的“C++”定义新的名字了,这又有何不可呢?我们不能因为微软的产品中用到“C++”几个关键字就觉得它就应该局限在标准C++的约束之下啊~走我们自己的路就是了,修行靠个人~
re: 用live writer发布c++博客 SuperPlayeR 2007-07-12 15:02
我也刚刚开始用live writer,好像不能够以摘要形式发布~
学习学习~~感谢分享~
re: 如何判断一个COM对象是否可用 SuperPlayeR 2007-07-09 09:53
我个人理解万连文的意思就是说,针对你讲述的这种情况,实际是因为com组件没有被注册造成了,而显然使用COM技术的规范性操作当然是先注册这个组件再使用。而博主您的想法也是通过读取注册表看该组件是否注册了,其实也是一种不规范使用。
不讲效率的话,memset(dest, 0, nDiff);也可以

恕我直言,我个人认为在这样的小地方求效率的提高,不如把代码写的更容易让人看懂。《Unix编程艺术》中似乎有对于这种“优化”做过探讨,我比较赞成书中作者的观点。
re: 学习Hacking Wince SuperPlayeR 2007-07-06 14:01
这次的最大收获是入门了汇编,感觉又增加了不少新的见识。
貌似第一个排序类 BubbleSorter中的
if(list[j+1] < list[j])
{
bIsDone = false;

int tmp = list[j+1];
list[j+1] = list[j];
list[j] = tmp;
}
其中int tmp应该是T tmp吧?
后面的用到交换的好像都有这个问题。
哦,原来作者在文章结尾的时候说明了,呵呵~~~怪我太着急还没看完就评论了。哎~下次要改掉这个坏习惯。
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
这个我文中也提到过,一般vc自动帮你生成的代码中都有这几行。确实对定位内存泄露很有帮助,不过有时候我们经常会用到一些第三方的类库,有的类库中高人们喜欢自己写内存分配管理的,这个就不一定灵了。我也是因为项目中有用到这样的类库才用其他方法试了半天,最后才发现原来还是自己的项目中的一个老毛病潜伏着~
其实不是我做梦在工作,而是被一些问题弄怕了~特别是有些问题是项目组成员弄出来的,而他自己又没法定位错误的时候,我就难受了~:)
大人是搬家了吧,一下子贴了这么多文章上来了。呵呵~
受教了~~
re: do...while(0)的妙用 SuperPlayeR 2007-07-05 10:27
第二种用法我是从Linux内核分析中看到的,博主说了MFC中也有,才恍然大悟。唉~~自己也用了这么久VC了,还没真地去好好读过这些源码,惭愧惭愧~~
re: 你有接受新事物的能力吗 SuperPlayeR 2007-07-01 02:43
hehe,我只是就这个事情说明一下不要过于肯定自己的观点,应该时常有一种怀疑的态度来否定既有的,开拓未有的。:)
re: 一道微软的Mini-Test笔试题(二) SuperPlayeR 2007-06-29 17:56
这个题目我有个思路,不过现在下班了,思路还没成熟。嘿嘿~~~晚点再奉上
re: 我的项目管理经历 SuperPlayeR 2007-06-29 14:30
受教了~

re: 一道微软的Mini-Test笔试题(一) SuperPlayeR 2007-06-29 14:11
本来看到哗哗一长串代码就准备跳过的,看到1楼的评论说写的不错,又回头认真读了一遍,确实不虚此行,受教了~//bow //thanks
re: 指针和引用的区别 SuperPlayeR 2007-06-29 13:52
写文章的“废话”似乎太多了,又不用骗稿费。
呵呵,也许是个人风格吧~~不过看了开头几句"废话",就不想再看了~
恩,看看再说。没搞过ATL+WTL,先学习学习。
不过初看代码发现里面有些地方没注意哦~最好是把编译中的一些警告看看,该改掉的就改掉。比如ADate::GetLunationInfo中就少了个return TRUE;
re: 面向对象分析方法与算法 SuperPlayeR 2007-06-28 09:41
建议阅读一下《Unix编程艺术》
re: 对研发部的思考 SuperPlayeR 2007-06-27 09:21
兵强强一个,将熊熊一窝

说的好啊,我确实很认同这一点,而且对自身的修养也还觉得很不满意,还在探索如何成为一个成功团队的leader~:)
re: 对研发部的思考 SuperPlayeR 2007-06-26 16:10
写出来确实舒服多了,钞票不会是选择公司的第一因素,至少对我来说不是。大家都是年轻人,可能都有创业的冲动和理想,然而却不是人人都有机会去当老板来创业的。所以,当你选择一个好的公司,能够为你提供一个发展空间,你实现自我价值的同时,也是帮助公司的成长与进步,这才是最理想的。
不过话还是那么句古话,钞票不是第一的,却是很重要的。公司给你开出的价码也是对你价值的承认。我相信如果你是一个好员工,一个好公司不会在这方面吝啬。
re: 你也许不知道的#define用法 SuperPlayeR 2007-04-24 17:14
是啊,但是我一直没注意到过。那次看到了,才想搞清楚它是啥意思,幸亏最后还是搞清楚了,就写篇随笔让和我一样不知道的兄弟们认识认识咯。