﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ifensin</title><link>http://www.cppblog.com/ifensin/</link><description>c++,.Net</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 23:04:16 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 23:04:16 GMT</pubDate><ttl>60</ttl><item><title>偏方医百病</title><link>http://www.cppblog.com/ifensin/archive/2009/10/11/98290.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Sun, 11 Oct 2009 01:40:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/10/11/98290.html</guid><description><![CDATA[<font size=2>1、贴中所讲的醋，就是一般食用醋，如果用白醋的，将另有注明。 <br>2、贴中所讲的白酒，是指50度以上的白酒。 <br>3、有些疾病治疗期间需忌口，是指用药期间如不忌口，则会影响疗效。 <br>4、结合古代民间流传已久的传统秘方整理出来的宝贵资料。它汇聚了古今诸多名方、妙方、秘术，不仅能为百姓带来方便，是每个家庭比备宝书，而且，对一些中西医专业医生来讲，也是很有参考价值的。</font> <br>一、内 科 1、初起感冒：葱白（连须）、生姜片5钱、水一碗煎开、加适量红塘称热一次服下（葱姜不需服下），并马上睡觉，出汗即愈。 <br>2、多日感冒：白天用法同第一条，另外，要在晚上睡觉前，用大蒜头捣成糊状，敷两足心（涌泉穴，每足心敷黄豆粒大即可），用布包好，次日晨揭去，连用2-3天即愈。 <br>3、头痛（各种头痛均可）：生白萝卜汁，每次滴鼻孔两滴（两鼻孔都滴），一日两次，连用4-5天，可除根。忌吃花椒、胡椒。 <br>4、头晕（头昏眼花、晕眩）：鸭蛋一个、赤豆20粒，搅匀蒸熟，早晨空服，每日一此，连用7天有特效。忌吃酒、辣。 <br>5、失眠、多梦：睡前用半脸盆热水，加一两醋双脚浸泡20分钟，并生吃葱白1-2根。 <br>6、干咳（感冒或其他原因引起均可）：生黑芝麻3钱（约一调羹），冰糖适量，共捣碎开水冲早晨空服，3天痊愈，少吃鱼类。 <br>7、有痰咳（包括急性气管炎、支气管炎、儿童气管炎）：白萝卜二两，鸭梨二两，一起切碎加水一碗煮熟加适量冰糖食用，一日二次连用3天。清热化痰。可与第九条同用。 <br>8、老气管炎（慢性气管炎）：取冬天打霜后丝瓜藤*一两、甘草*一钱，水一碗煎汤一次服下，一日二次，连用半月至20天，可根治。忌烟酒、辣物，最好与第九条同用。 <br>9、长期咳嗽（肺气肿及气管炎等引起咳嗽）：明矾一两，研成粉用醋调成糊状，每晚睡前取黄豆大一团敷足心（涌泉穴，两足都敷），用布包好、次日晨揭去，连用7天有特效。 <br>10、哮喘（儿童哮喘同）：干蚯蚓*半斤，炒黄研成粉，用白糖水冲服，一次2钱（约半调羹粉）一日二次，服完即愈。忌吃辣物。 <br>11、胃痛、吐酸、胃下垂、胃窦炎：大蒜头一次一两连皮烧焦，再加一碗水烧开、加适量白糖空腹食用，一日二次，连用7天可根治。 <br>12、胃、十二脂肠溃疡：鸡蛋壳30个炒焦研成粉，麦面粉半斤炒焦，一起抖匀，早晚饭前用。开水冲服，一次2钱（约半调羹），一日二次，一般一付药可愈，重病需二付。 <br>13、高血压、高血脂：芹菜籽*一两，用纱布包好，放10斤水煎汤，早、中、晚饮1杯。不怕辣者，可，早中晚食生蒜2头，有降血压、血脂特效。 <br>14、心脏病、冠心病：花生壳一次一两，绿豆5钱，煎一碗汤服下，一日二次，需半月. <br>15、肠胃炎、腹泻：每次用麦面粉半两炒焦，加适量白糖用开水调匀，饭前服，一日二次，2-3天有特效。忌吃柿子、香蕉、油腻。 <br>16、消化不良（儿童消化不良同）：鸡盹皮4两炒黄研成粉，饭前用白糖水冲服、一日二次，一次2钱（约半调羹）、儿童减半、一剂服完即可，忌吃田螺。 <br>17、胸闷气胀：白萝卜籽*5钱、煎一碗汤服，一日三次，连用3天有消积顺气之功效。 <br>18、神经衰落：猪脑1两，加入蜂蜜一调羹，蒸熟吃，一日一次，连吃5-10天。 <br>19、贫血：杀鸡、鸭时，将鲜血流在一张干净白纸上，晒干揉成粉，用葡萄酒调服，一次半调羹粉，一日二次，连服半月。忌海带。 <br>20、内热口干：芦根*、绿豆各5钱，加一碗水煮开、加适量冰糖、去芦根吃豆喝汤，日服二次，连服3天。生津润肺，降火解热。 <br>21、 慢性肝炎：每次用白茅根*二两，烧一碗水服汤，一日三次，一般需服半月，忌辣物。 <br>22、胆、肾、尿道结石：用鸡内金、玉米须50克，煎一碗汤一次服下，一日2-3次，连服10天。忌吃肝脏、肥肉、蛋黄。 <br>23、急、慢性肾脏炎：4两重左右黑鱼一条，去鳞、肠等，绿茶叶2钱，包入鱼肚内用线捆好，加一碗水煮熟，吃鱼喝汤，一日一剂，连吃10-15天。忌酒、盐、香蕉、房事。 <br>24、胆囊炎：冬瓜籽、绿豆各5钱煎一碗汤，一次服下。一日三次，连用10日。 <br>25、糖尿病：猪胰一条，冬瓜皮1两，加水煮熟，少加些油、盐和调料（勿加酒、糖）吃下，一日一剂，连吃20天。 <br>26、记忆力差：鹅蛋一只，打入碗内加适量白糖搅匀，蒸熟早晨空服，连吃5天，有清脑益智功能，对增强记忆有特效，忌吃海带、花椒、动物血、酒、绿豆 <br>27、小便不通：杨柳树叶1两，煎一碗汤一次服下，一日二次，2-3天即可通尿无阻。 <br>28、小便失禁（尿急、控制不住）：鸡肠一付，洗净晒干，炒黄研成粉，用黄酒送服，每次1钱，一日三次，服完即愈。忌姜、辣。 <br>29、尿频（小便次数多）：生韭菜籽*3两，研成粉，每次2钱用白开水送服，一日二次，一般需服2-10天。忌浓茶、牛奶。 <br>30、便秘（大便燥结、排便困难）：用煮熟的南瓜一碗，加入猪油5钱和适量的盐吃下，一日一次，一次见效，3日可愈。 <br>31、痢疾、泄泻：每次用大蒜两头，连皮放火内烧焦再煮一碗水空服汤，一日二次，连用3天可消炎解毒，治久泻不愈特别有效。 <br>32、打鼾：花椒5-10粒，睡前用开水泡一杯水，待水凉后服下（花椒不服下），连服5天，以后再也不打鼾。 <br>33、打嗝：用手指甲一小条，点燃闻味，即止。 <br>34、晕车：乘车时切一片生姜含口中，或用一块膏药贴在肚脐上（此条孕妇禁用），对于晕车教严重者，可两方同用，有特效。 <br>35、中风：每日喝1两生芹菜只汁，病轻者服半月，病重者服一月可愈，忌吃羊肉、鸭血。 <br>36、神经病（又叫癫痫、羊癫痫、疯狂病、狐大仙）：干桃化*3两，用刀切成细末，分成十份，每次一份，在发病时用淡明矾水送服，一日二次，5天一疗程，连用3疗程。 <br>37、甲状腺功能亢进症：黄药子*9-12克，用三碗水煎成一碗，每日一次；另可用50克泡1斤白酒，日服1两，5-8周代谢率明显降低。 <br>38、慢性肠炎：鸡蛋清1只，白酒半两，混合，每晚睡前服。 <br>二、儿科 <br>39、小儿感冒（包括婴儿）：生姜5钱，水半碗煎开加入红塘服下，一日二次，2天可愈。 <br>40、百日咳（及婴儿气喘）：大蒜一头，去皮捣烂加白糖3钱，过半小时后用开水一两冲，两天可治小儿咳嗽、婴幼儿气喘，有特效。 <br>41、小儿遗尿：生葱白一根，捣烂，每晚睡前敷肚脐，用布包好，次日晨揭去，连用3-5天，可治愈。 <br>42、夜啼：大人用一小撮绿茶放口内嚼碎，每晚睡前敷小儿肚脐，用布包好，次日晨揭去，连用3天。 <br>43、婴幼儿腹泻、腹胀：大蒜一头，连皮烧焦，再与半碗水烧开，加适量白糖服汤，一日一次，一般两三天即可消食止泻。 <br>44、盗汗（成人盗汗同）：老豆腐半斤，切片贴锅内烧成巴，再加水一碗，白糖适量，烧汤连巴一同食用，每晚睡前服，3天痊愈。 <br>45、打蛔虫：生南瓜籽20粒，去壳饭前空服，一次吃下，第二天虫子即可随大便排出。 <br>46、经常肛门痒：伤湿解膏一块，每晚睡觉前贴肛门上，次日晨揭去，连用三天。 <br>47、小儿厌食（不思吃饭）：山楂*3钱，鸡盹皮1钱，加半碗水煮熟饭前吃完，一日二次，连吃三天，有开胃、助消化之功效。 <br>48、腹痛（成人腹痛同）：用一片桔皮敷在肚脐上。再用半斤盐炒热（不要太烫），敷在桔皮上，可立即止痛。 <br>49、误食杂物：韭菜半斤，不要切碎，炒熟多加些猪油，一次吃光，杂物可随大便排出。 <br>50、磨牙：每晚睡前吃一块生桔皮，连吃2-3天，可治小儿及成人睡觉磨牙。 <br>51、流口水（成人、老人睡觉流口水方法同）：泥鳅半斤，去内脏晒干，炒黄研成粉，用黄酒冲服，一次二钱，一日一次，服完即可。 <br>52、儿童缺钙：每次用虾皮5钱，海带1两，一起煮汤，加油盐食用，一日一次连用半月。 <br>53、腮腺炎：醋和墨汁按1：1配好，用毛笔蘸此，涂于患处，每天5-6次，一般二三天腮部肿胀自消。 <br>54、小肠气：生姜汁5钱，先给患儿洗澡，待周身出汗时，用姜汁擦患部，一日二次，连用三、四天，以后不再复发。 <br>55、考场镇静良方：学生进考场如临战场，往往由于过度紧张，使自己产生心慌、怯场现象，从而不能正常发挥而名落孙山。现介绍一种单方：酸枣仁*、绿豆各一两，煮一碗汤一次吃完，一日二次，次方要在考试前两天开始服，至考试结束，有镇静安神功效。 <br>三、外科 <br>56、关节炎、肩周炎（包括风湿性、类风湿性关节炎）：食用细盐1斤，放锅内炒热，再加葱须，生姜各3钱，一起用布包好，趁热敷患处至盐凉；一日一次，连用一星期，有追风祛湿之功效。 <br>57、劳伤腰痛：艾叶*一两，炒黄的蟹壳一两，浸白酒一斤，三日后用酒涂腰部，一日2-3次，7-10天，可治多年腰痛。 <br>58、肾亏腰痛：丝瓜籽半斤，炒黄研成粉。白酒送服，每次1钱，一日二次，服完即愈。此方还可治妇女产后腰痛。 <br>59、坐骨神经痛：食用细盐一斤，炒热后加艾叶*一两，用布包好敷患处至盐凉，一日一次，连用5-10天。（盐可每天反复使用）。 <br>60、颈椎痛：羊骨头（生的，煮过均可）二两，砸碎炒黄，浸白酒1斤，三日后擦颈部，一日三次，一般不过15天，可以根治。 <br>61、骨刺（骨质增生）：狗骨头三两，砸碎炒黄浸白酒1斤，三日后用酒擦患处（最好带吃此酒一盅），一日三次，需用半月可愈。 <br>62、腿抽筋：桑树果*一两，煎一碗汤一次喝下，一日二次，5天痊愈。 <br>63、四肢麻木：老丝瓜筋*一两，煎一碗汤一次服下，一日二次，连服一星期，有特效。 <br>64、内、外痔疮：大田螺每天一只，将盖去掉。放入冰片*1钱，5分钟后取田螺水涂肛门，每天2次，7天痊愈，忌吃酒、辣物。 <br>65、打针结块：将土豆切成半公分厚的薄片，敷在患处，再用热毛巾捂，一日二次，一次20分钟，2-3天肿块消散。 <br>66、狐臭：胡椒、花椒各50粒，研成粉，再加入冰片*2钱，用医用酒精调匀，每日取一小团涂患处并用胶布贴好，一日换一次，连用半月可根除。 <br>67、口眼歪（面部神经麻痹）：黄鳝血涂面部，向左歪涂左边，并用手掌从左向右反复抹，每次2分钟，一日二次，向右歪则反做，连用三四天即正。 <br>68、脱肛（解大便时肛门脱下）：每次用韭菜半斤，水2斤煎开洗肛门，一日二次，洗三天。 <br>69、落枕（睡觉时由于枕头或姿势不适，而引起的颈痛）：韭菜汁加热擦颈部，日擦七八次。2-3天可治好。 <br>70、戒烟：干南瓜藤*一两，煎一碗汤加适量红糖一次服，一日三次，7天后永不想抽烟。 <br>71、戒酒：活黄鳝一条，放一瓶白酒内浸二天后此酒，1次1-2两，一日三次，将酒服完后永远不想再喝一滴酒。 <br>72、喝酒不醉：葛根*1钱，在喝酒前泡一杯开水喝下再喝酒，酒精可解，所以人不会醉。 <br>73、疥疮（老烂脚）：豆腐渣炒热，敷患处，用布包好，日换一次，可治愈烂脚久不收口。 <br>74、淋巴结核：田螺壳炒黄研成粉，用芝麻油调匀敷患处，日换一次，连用7-10天。 <br>75、长寿保健药酒：磁石、何首乌*、大枣、核桃、枸杞*各一两，浸白酒或黄酒二斤，两天后按常日酒量吃此酒，如常饮能使老人面部红润，增强抗病力，有延迟衰老功效。 <br>四、皮肤科 <br>76、皮肤痒：鲜韭菜、淘米水，按1：10重量配好，先泡二小时再连韭菜一起烧开，去韭菜用水洗痒处或洗澡，一次见效，洗后勿用清水过身，一日一次，连洗三天永不再痒。 <br>77、牛皮癣、顽癣（银屑病）：侧柏叶*、苏叶*、各200克，蒺藜*40克，共研粗末，装纱布袋内，用水6斤沸煮后小火煮30分钟，涂洗患处，日3次。 <br>78、神经性皮炎（或过敏、或季节性发生）：老豆腐三、四两炒焦，用芝麻油调匀涂患处，一日3次，三、四天有特效。 <br>79、湿疹(皮肤起红点、水泡、发痒)：用绿豆3两炒焦研成粉，用醋调匀涂患处，一日二次，连涂一星期可根治。忌花椒、胡椒。 <br>80、风疹块、痱子：鲜韭菜汁每天涂患处，一次即明显见效，一日三次，2-3天即愈。 <br>81、白癜风：乌梅*30-50克浸泡在95%酒精100毫升中，2周后过滤再加二甲亚矾*5毫升，每日擦患处3次，每次用力擦5分钟。 <br>82、手气、脚气：生大蒜头两只，去皮放入半斤醋内泡3天，再用大蒜头擦患处，每日3次。连用7-10日，有消炎和杀死细菌之特效。 <br>83、手汗、脚汗太多：明矾*5钱、热水2斤，一起溶化浸手脚、一次10分钟、浸后让其自然凉干，一日一次，5天后手脚汗正常。 <br>84、手足开裂、粗糙：生猪油二两，加白糖1钱。捣匀擦手脚，一日2-3次。一般7天克愈，再擦几天以后永不复发。 <br>85、冻疮未破：尖头辣椒5钱，白酒或酒精半斤一起放入瓶内浸3天后，在冻疮初起，皮肤红肿发热时涂患处，一日五次，有特效，连用十天至半月痊愈除根，来年永不再发。 <br>86、冻疮已破：陈旧棉花（越陈旧越好）烧成灰，用麻油调匀涂患处，一日三次。 <br>87、鹅掌风、灰指甲：醋1斤熬至半斤，加入去皮大蒜头一只，二日后用醋每天浸手二次，一次10分钟，浸后再用清水洗净，7天即可。 <br>88、疮、疔、疖：用生土豆捣烂，涂患处用布包好，日换一次，一般5天即可。 <br>89、鸡眼、侯子：先将患处外部老皮消去，再涂上清凉油，用香烟火熏烤，至疼时稍坚持后拿掉烟火，一日二次，5天可脱落不发。 <br>90、烫伤：可选用蛋清、白糖水、醋、蜂蜜、在烫伤时马上涂伤处，就不会起泡又易好。 <br>91、流火、丹毒（多患于下肢、皮肤红、肿、热痛并伴有寒战、高热、头痛）：用鲜丝瓜叶汁拌金黄散*成糊状，外涂患处，内服三妙丸*中成药有奇效。 <br>92、蚊虫咬伤（红肿、痒）：可选用大蒜、生姜擦或用醋、牙膏、盐水、香烟灰加水调匀涂，均可立即见效止痒、解毒消肿。 <br>五、妇科、男性科 <br>93、妇女白带（白带多、有异味）：生鸡蛋一只，从一头敲一小洞，将7粒白胡椒装入蛋内，用纸封好蒸熟，去胡椒吃蛋，每日一只，连吃一星期，忌吃猪血、绿豆。 <br>94、月经不调（来经提前或推迟均在7天以上）：干藕节半斤，炒黄研成粉，白酒送服，一日三次，一次2钱，服完即可每月来经。 <br>95、血崩（月经量太多）：黑木耳3两，炒干研成粉，红塘水送服，一次3钱，一日二次。 <br>96、闭经（少女18岁后和非怀孕妇女二月以上不来月经）：茄子切片晒干，炒黄研成粉。黄酒送服，一日二次，一次5钱，十天可愈。 <br>97、通经（来经时腹痛）：用丝瓜筋一次一两，烧一碗汤服，一日二次，7天痊愈。 <br>98、外阴痒：葱白连根一两，花椒10粒，一起煎水一碗，洗阴部，每天二次，共洗3天。 <br>99、产后缺乳：莴苣籽*5钱，煎汤一碗，加白糖一次服下，一日二次，5天后乳汁充足。 <br>100、产前知男女：将孕妇清晨第一次小便滴入两滴医用酒精，变红者为男，无变化为女。 <br>101、女不孕：生鸡蛋一只开一小孔，放入红花*0.5钱左右，再蒸熟吃蛋，每天一只，连吃一个月，（要在月经干净后开始吃）。 <br>102、子宫、卵巢肿瘤：红花6克、黑豆30克，水煎服，去红花食黑豆与汤，日2次。 <br>103、男不育：每天用麻雀一只，去掉毛和内脏，将菟丝籽*2钱放入麻雀肚内，包好蒸熟后吃麻雀，连用半月，可治男子婚后久不生育。 <br>104、阳痿（男子阳茎不能勃起）：磁石（吸铁石）5钱，公鸡睾丸5只，浸白酒一斤，三日后按常日量吃酒，一般需吃半至一月。（磁石可反复使用）。如不吃酒人，每日炒二只公鸡睾丸吃，连吃半月至一月，完全恢复性功能。 <br>105、遗精（睡觉做梦流精）：猪腰子一个，切开放入韭菜籽*2钱，用线扎好蒸熟，再切碎加油盐吃，一日一个，连吃四、五个腰子。 <br>106、早泄（男子在房事时过早射精）：韭菜籽*半斤炎黄，用黄酒送服，一次2钱，一日三次，服完即痊愈。 <br>107、小肠气：食盐半斤炒热，加入花椒20粒，用布包好，敷患处至盐凉，一日一次，最好睡前用，连用4、5天有特效。 <br>108、男子性功能减退（不属于阳痿，只是性功能减弱力不重心，多见于年老体弱者，也有房事过度引起的）：活大青虾或白虾一两，白酒1斤、浸5天后按常日酒量吃酒，酒完后将虾炒吃。连用半月，有补阴壮阳、补充男性激素、增强性机能之功效。 <br>109、前列腺炎：麝香0.5克，白胡椒7粒，研成细末，装瓶备用。将脐用酒精洗净，将麝香放入肚脐内，再将胡椒粉盖在上面，后盖圆白纸一张，外用胶布贴紧，每隔7-10日换药1次，10次为1疗程。 <br>110、前列腺肥大：冬瓜籽*30克、黑木耳15克、秦皮*15克，水煎服，日2次。 <br>六、五官科 <br>111、牙痛（神经性、过敏性、蛀牙痛均可）：花椒10粒，白酒一两，将花椒浸在酒内，十分钟后用酒口含，几分钟即见效，一日2次每次10分钟，3-4天痊愈。 <br>112、牙周炎、牙龈炎：用一只鸡蛋清加等量白酒搅匀喝一口，含口中，5分钟后吐掉，一日二次（一日一只蛋），2-3天消炎止痛。 <br>113、牙出血（经常出血或刷牙引起）：花椒10粒，醋三两，浸2天后口含，一次3分钟，一日2次，连用5天有特效。 <br>114、电光性红眼病：用人乳滴入眼内，闭眼10分钟，一日二次，一次二滴，有特效，忌辣。 <br>115、结膜炎（非电光红眼病）：用绿茶水，每日洗眼3-5次，一般2-3天有消炎抗菌之功效。忌吃酒、辣物。 <br>116、流泪眼、沙眼：干桑叶*1两，加一碗水烧开、每日洗眼3-5次，连用一星期。 <br>117、视力衰退（老光、老花、视物不清）：白菊花*2钱，枸杞子*2钱，每日用开水泡饮（一剂可泡三遍），连饮半至一月，有清水明目之功效。忌吃辣物、海带。 <br>118、偷针眼：用缝衣针的针鼻部反复摩擦患处，并稍用力挤压，每日2-3次，不出二日即可治愈。
<p>119、白内障（晶状浑浊、使视力下降）：白蒺藜*250克，羊肝250克，白糖200克，研为末，每次服15克，日服2次，8周见效。 <br>120、青光眼（眼球内压力太高，角膜水肿或呈雾状，视力下降）：猪眼一付，加绿豆一两煮熟，再加油、盐适量，每日吃一剂，连吃半月，能使眼内轻松，眼睛明亮。 <br>121、中耳炎（耳内长期流水、流浓、胀痛）：鲜韭菜汁5钱，加入明矾半钱，溶化后滴入耳内，一次1-2滴，一日2次，连用5天。 <br>122、耳鸣、耳聋：当归*15钱，黑豆30克，红塘30克，水煎服，日2次，2周见效。菊花*30克，芦根*30克，冬瓜皮*30克，水煎服，每日2次，2周见效。 <br>123、虫入耳：用猫尿一滴，滴入耳内，虫子会自动出来。（提取猫尿法：用大瓣大蒜头，去皮擦猫鼻子，猫即撒尿）。 <br>124、口疮（又叫羊胡疮，在口内叫口腔溃疡）：醋、蒸馏水等量搅匀，涂患处，一日5次，连用2-3天，可消炎止痛，效果极佳。 <br>125、咽喉痛（咽部干燥疼痛、有异物感，急、慢性均可）：用绿茶叶泡浓茶约2两水量，加入半两蜂蜜搅匀，每日分几次漱喉并慢咽下，每日一剂，连用3-5天，消炎镇痛，湿润咽喉，治急、慢性咽喉炎。忌吃烟、酒，一切有刺激性食物。 <br>126、扁桃体炎（嗓子二侧发起红肿、痛、一般多发于着凉后）：黑木耳一两，炒干研成粉，每次用半调羹粉与蜂蜜调匀口服，一日二次连服5天永不再发（此方在扁桃体炎正在发作时用）。 <br>127、声音哑（咳嗽、讲话太多、唱歌、内火大等原因引起的音哑）：鸡蛋一只、打入碗内，加醋一条羹、搅匀蒸熟食用，一日一剂，连吃2-3天，声音响亮。忌辣。 <br>128、口臭：芦根*（鲜、干均可）一两，煎汤一碗加冰糖适量内服，一日一次，早晨空服，连服一星期。清火解毒，治内热胃火。 <br>129、鱼刺卡喉：较轻者用好醋喝一口即可。如果不行，可用鸭口水一调羹喝下，鱼刺可自动化掉。（取鸭口水法：用一片生姜，放入鸭嘴内，再将鸭倒吊，鸭即流口水）。</p>
<p>130、鼻炎（包括过敏性、萎缩性和鼻窦炎，有的流脓流水、鼻涕多、有的闻味不灵敏）：用黄砖一块，放火上烧烫，取下，将一调羹醋倒在热砖上，此时有大量热气上冒，患者用鼻闻其热气，一日二次，连用7天，消热、消炎，解毒通窍，治各类鼻炎，有特效。 <br>131、流鼻血：藕节*、芦根*等量，一起切碎，煎一碗水一次喝下，一日二次，连用5日，清热止血，永不复发。 <br>132、除面部皱纹：鲜黄瓜汁二调羹，加入等量鸡蛋清(约一只蛋)搅匀，每晚睡前先洗脸，再涂抹面部皱纹处，次日晨用温水洗净，连用半至一月，能使皮肤逐渐收缩，消除皱纹有特效. <br>133、 皮肤粗黑：靠化妆品增白皮肤，只能一时掩饰，治表不治本，现向你介绍一种治表治本能使皮肤增白而真白的妙方，既简单又有特效：用白醋甘油按5：1混合，常 擦皮肤(一日二三次)能使皮肤湿润，减少黑色素沉积，一月后皮肤即细腻白嫩，洁净光滑富有弹性，充满美感。(此方对遗传黑皮肤均有效). <br>134、除雀斑：杏仁*5钱，研成细粉，用鸡蛋清调匀，每晚睡前涂面部，次日清晨用温水洗去，一日一次，10-15日显效，以后不发.</p>
<p>135、黄褐班蝴蝶斑：冬瓜汁白醋等量，调匀涂面部，一日2-3次，涂后过10分钟洗去.连用半月即可除净. <br>136、除面部色素斑：鲜西红柿汁蜂蜜，按5：1混合，涂面部，过10分钟后洗净，连用10-15日，能使黑色素分解，皮肤变白红润. <br>137、除粉刺(酒刺青春豆座疮)：鲜黄瓜汁白醋等量调匀，先用热水洗脸后再涂脸，一日三次，涂后过10分钟用温水洗去，连用半月可愈，以后不老. <br>138、除黑痣：花生仁烧焦捣碎，用酒精调匀，涂痣上，每晚睡前涂上并包好，次日晨洗去，连用半月可除，(大痣需涂一月). <br>139、脱发头屑头痒：每次用桑树根皮*4钱，水二斤，烧开洗头，一日一次，洗后勿用清水过头连用5天，能促进头皮血液循环，有固发作用，并治头屑头痒，可再生发. <br>140、斑秃秃顶：按134条使用，并用老姜片每日擦头皮3-5次，与134条同用半月，以后不出一两月便会重新长出一头浓发. 141、头发增亮：啤酒醋按2：1混合.每日用毛巾吸湿再涂头发一次，连用半月.</p>
<p>142、白发变黑：何首乌*黑芝麻各三两，一起炒干研碎，用白糖水调服，每次3钱，一日一次，连服半月，可补肾健发.忌蚕豆. <br>143、减肥：干荷叶*干冬瓜皮*按1：2配好，每日用一两泡一斤左右热水喝，有去厚腻刮油手之功效，忌肥肉. <br>144、瘦人增胖：鸡蛋二只，打在碗内，加生番茄汁一调羹和适量白糖，用等量开水冲成半熟食用，每日一次，早晨空服(也可吃稀黄荷包蛋)连吃一月，以后会逐渐变胖. <br>145、牙变白：用食盐小苏打等量，加入调成牙膏状，每日刷牙一次，3-4天可除牙齿表层所有色斑，使牙齿洁白. <br>146、除汗毛胡须(多毛症)：旧电池粉碱粉等量，用医用酒精调匀，过5分钟即可自动洗去，一日一次，5-7天后汗毛胡须即可自动脱落，以后不会再发，此方对皮肤无过敏，无刺激，无任何副作用</p>
<img src ="http://www.cppblog.com/ifensin/aggbug/98290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-10-11 09:40 <a href="http://www.cppblog.com/ifensin/archive/2009/10/11/98290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在C++中实现C#的delegate机制</title><link>http://www.cppblog.com/ifensin/archive/2009/09/02/95073.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Wed, 02 Sep 2009 02:16:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/09/02/95073.html</guid><wfw:comment>http://www.cppblog.com/ifensin/comments/95073.html</wfw:comment><comments>http://www.cppblog.com/ifensin/archive/2009/09/02/95073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ifensin/comments/commentRss/95073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ifensin/services/trackbacks/95073.html</trackback:ping><description><![CDATA[<p>由于这段时间较忙，自从上次我发布了一个供初学者学习的&#8220;MFC&#8221;程序后，就没怎么写文章了。这段时间在忙新的项目，项目逻辑还算复杂，用了好多有闪光点的技术，下面我要讨论的是闪光点之一：在C++中实现C#的delegate机制。 </p>
<p>用过C#的朋友都觉得C#的确是个好语言，但有时由于特殊需要，不得不用C++，在C++中要想实现C#中的Thread等也是可行的，不过代码要稍复杂。 </p>
<p>以例子来说明：</p>
<p>view plaincopy to clipboardprint?<br>class&nbsp;&nbsp; Sdk&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; DoSomething();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>};&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>class&nbsp;&nbsp; client&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Sdk&nbsp;&nbsp; m_sdk;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; DoSomething{}&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sdk.DoSomething();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; OnMessage()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>}&nbsp;&nbsp; <br>class&nbsp;&nbsp; Sdk <br>{ <br>public: <br>&nbsp;void&nbsp;&nbsp; DoSomething();&nbsp;&nbsp; <br>}; </p>
<p>class&nbsp;&nbsp; client <br>{ <br>public: <br>&nbsp;Sdk&nbsp;&nbsp; m_sdk; <br>&nbsp;void&nbsp;&nbsp; DoSomething{} <br>&nbsp;{ <br>&nbsp;&nbsp;m_sdk.DoSomething(); <br>&nbsp;} </p>
<p>&nbsp;void&nbsp;&nbsp; OnMessage() <br>&nbsp;{ <br>&nbsp;&nbsp;// <br>&nbsp;} <br>}&nbsp; </p>
<p>这个例子比较简单，Sdk用来实现某个功能，client是客户程序，要想在m_sdk做处理的时候能发送通知到client，有几个方法可以实现， 其一是发线程消息，其一是回调，但传统的回调对面向对象的支持并不好，这就是实现delegate的出发点。 下面是一个实现：</p>
<p>view plaincopy to clipboardprint?<br>class&nbsp;&nbsp; Delegate&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual&nbsp;&nbsp; ~Delegate(void){&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual&nbsp;&nbsp; void&nbsp;&nbsp; operator()(void)&nbsp;&nbsp; =&nbsp;&nbsp; 0;&nbsp;&nbsp;&nbsp; <br>};&nbsp;&nbsp;&nbsp; <br>template &lt;typename&nbsp;&nbsp; C&gt;&nbsp;&nbsp;&nbsp; <br>class&nbsp;&nbsp; DelegateImpl&nbsp;&nbsp; :&nbsp;&nbsp; public&nbsp;&nbsp; Delegate&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>private:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef&nbsp;&nbsp; void&nbsp;&nbsp; (C::*F)(void);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; C*&nbsp;&nbsp; m_class;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; F&nbsp;&nbsp; m_fun;&nbsp;&nbsp;&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; DelegateImpl(C*&nbsp;&nbsp; c,&nbsp;&nbsp; F&nbsp;&nbsp; f){&nbsp;&nbsp; m_class&nbsp;&nbsp; =&nbsp;&nbsp; c;&nbsp;&nbsp; m_fun&nbsp;&nbsp; =&nbsp;&nbsp; f;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual&nbsp;&nbsp; void&nbsp;&nbsp; operator()(void)&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m_class)&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; (m_class-&gt; *m_fun)();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>};&nbsp;&nbsp; <br>class&nbsp;&nbsp; Delegate <br>{ <br>public: <br>&nbsp;virtual&nbsp;&nbsp; ~Delegate(void){&nbsp;&nbsp; } <br>&nbsp;virtual&nbsp;&nbsp; void&nbsp;&nbsp; operator()(void)&nbsp;&nbsp; =&nbsp;&nbsp; 0; <br>}; <br>template &lt;typename&nbsp;&nbsp; C&gt; <br>class&nbsp;&nbsp; DelegateImpl&nbsp;&nbsp; :&nbsp;&nbsp; public&nbsp;&nbsp; Delegate <br>{ <br>private: <br>&nbsp;typedef&nbsp;&nbsp; void&nbsp;&nbsp; (C::*F)(void); <br>&nbsp;C*&nbsp;&nbsp; m_class; <br>&nbsp;F&nbsp;&nbsp; m_fun; <br>public: <br>&nbsp;DelegateImpl(C*&nbsp;&nbsp; c,&nbsp;&nbsp; F&nbsp;&nbsp; f){&nbsp;&nbsp; m_class&nbsp;&nbsp; =&nbsp;&nbsp; c;&nbsp;&nbsp; m_fun&nbsp;&nbsp; =&nbsp;&nbsp; f;&nbsp;&nbsp; } <br>&nbsp;virtual&nbsp;&nbsp; void&nbsp;&nbsp; operator()(void) <br>&nbsp;{ <br>&nbsp;&nbsp;if(m_class) <br>&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp; (m_class-&gt; *m_fun)(); <br>&nbsp;} <br>}; <br>&nbsp;</p>
<p>有了上面代码，再稍加修改sdk和client代码就能实现事件通知了：</p>
<p>view plaincopy to clipboardprint?<br>class&nbsp;&nbsp; Sdk&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Delegate*&nbsp;&nbsp; pEvent;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; sdk():&nbsp;&nbsp; pEvent(NULL)&nbsp;&nbsp; {&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; DoSomething()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt; &lt;"opened" &lt; &lt;endl;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pEvent&nbsp;&nbsp; !=&nbsp;&nbsp; NULL)&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*pEvent)(&nbsp;&nbsp; );&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>};&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>class&nbsp;&nbsp; client&nbsp;&nbsp;&nbsp; <br>{&nbsp;&nbsp;&nbsp; <br>private:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Sdk&nbsp;&nbsp; m_sdk;&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>public:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; client()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sdk.pEvent&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Delegate &lt;client&gt; (this,&nbsp;&nbsp; OnOpen);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; DoSomething()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sdk.DoSomething();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; OnDoSomething()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt; &lt;"event&nbsp;&nbsp; fired" &lt; &lt;endl;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>}&nbsp;&nbsp; <br>class&nbsp;&nbsp; Sdk <br>{ <br>public: <br>&nbsp;Delegate*&nbsp;&nbsp; pEvent; <br>&nbsp;sdk():&nbsp;&nbsp; pEvent(NULL)&nbsp;&nbsp; {&nbsp;&nbsp; } <br>&nbsp;void&nbsp;&nbsp; DoSomething() <br>&nbsp;{ <br>&nbsp;&nbsp;cout &lt; &lt;"opened" &lt; &lt;endl; <br>&nbsp;&nbsp;if(pEvent&nbsp;&nbsp; !=&nbsp;&nbsp; NULL) <br>&nbsp;&nbsp;&nbsp;(*pEvent)(&nbsp;&nbsp; ); <br>&nbsp;} <br>}; </p>
<p>class&nbsp;&nbsp; client <br>{ <br>private: <br>&nbsp;Sdk&nbsp;&nbsp; m_sdk; </p>
<p>public: <br>&nbsp;client() <br>&nbsp;{ <br>&nbsp;&nbsp;m_sdk.pEvent&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Delegate &lt;client&gt; (this,&nbsp;&nbsp; OnOpen); <br>&nbsp;} <br>&nbsp;void&nbsp;&nbsp; DoSomething() <br>&nbsp;{ <br>&nbsp;&nbsp;m_sdk.DoSomething(); <br>&nbsp;} </p>
<p>&nbsp;void&nbsp;&nbsp; OnDoSomething() <br>&nbsp;{ <br>&nbsp;&nbsp;cout &lt; &lt;"event&nbsp;&nbsp; fired" &lt; &lt;endl; <br>&nbsp;} <br>} <br>&nbsp;</p>
<p>上面的实现有不少局限性，事件处理方法的返回值和参数设置不是十分灵活，因此可以用宏定义优代以上代码， 下面给出我的全部代码，请朋友指正。</p>
<p>view plaincopy to clipboardprint?<br>//////////////////////////////////////////////////////////////////////////&nbsp;&nbsp; <br>//delegate 0&nbsp;&nbsp; <br>#define DEFINE_DELEGATE(NAME, R)\&nbsp;&nbsp; <br>class NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual ~NAME##Delegate(void){ }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(void) = 0;\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C&gt;\&nbsp;&nbsp; <br>class NAME##DelegateImpl : public NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>private:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef R (C::*F)(void);\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; C* m_class;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; F m_fun;\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(void)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(m_class)\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return (m_class-&gt;*m_fun)();\&nbsp;&nbsp; <br>}\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C, typename F&gt;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##Delegate* Make##NAME##Delegate(C* c, F f)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return new NAME##DelegateImpl&lt;C&gt;(c, f);\&nbsp;&nbsp; <br>}&nbsp;&nbsp; <br>//////////////////////////////////////////////////////////////////////////&nbsp;&nbsp; <br>//delegate 1&nbsp;&nbsp; <br>#define DEFINE_DELEGATE(NAME, R, P1)\&nbsp;&nbsp; <br>class NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual ~NAME##Delegate(void){ }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(P1 p1) = 0;\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C&gt;\&nbsp;&nbsp; <br>class NAME##DelegateImpl : public NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>private:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef R (C::*F)(P1);\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; C* m_class;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; F m_fun;\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(P1 p1)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(m_class)\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return (m_class-&gt;*m_fun)(p1);\&nbsp;&nbsp; <br>}\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C, typename F&gt;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##Delegate* Make##NAME##Delegate(C* c, F f)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return new NAME##DelegateImpl&lt;C&gt;(c, f);\&nbsp;&nbsp; <br>}&nbsp;&nbsp; <br>//////////////////////////////////////////////////////////////////////////&nbsp;&nbsp; <br>//delegate 2&nbsp;&nbsp; <br>#define DEFINE_DELEGATE(NAME, R, P1, P2)\&nbsp;&nbsp; <br>class NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual ~NAME##Delegate(void){ }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(P1 p1, P2 p2) = 0;\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C&gt;\&nbsp;&nbsp; <br>class NAME##DelegateImpl : public NAME##Delegate\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>private:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; typedef R (C::*F)(P1, P2);\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; C* m_class;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; F m_fun;\&nbsp;&nbsp; <br>public:\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; virtual R operator()(P1 p1, P2 p2)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(m_class)\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return (m_class-&gt;*m_fun)(p1, p2);\&nbsp;&nbsp; <br>}\&nbsp;&nbsp; <br>};\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template&lt;typename C, typename F&gt;\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; NAME##Delegate* Make##NAME##Delegate(C* c, F f)\&nbsp;&nbsp; <br>{\&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return new NAME##DelegateImpl&lt;C&gt;(c, f);\&nbsp;&nbsp; <br>}&nbsp;&nbsp; <br>&nbsp; <br>/*&nbsp; <br>//////////////////////////////////////////////////////////////////////////&nbsp; <br>//sample&nbsp; <br>DEFINE_DELEGATE(Open, void, int, string)&nbsp; <br>class sdk&nbsp; <br>{&nbsp; <br>public:&nbsp; <br>&nbsp;&nbsp;&nbsp; OpenDelegate* pEvent;&nbsp; <br>&nbsp;&nbsp;&nbsp; sdk(): pEvent(NULL) { }&nbsp; <br>&nbsp;&nbsp;&nbsp; void Open()&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"opened"&lt;&lt;endl;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pEvent != NULL)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*pEvent)(100, "你好");&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>};&nbsp; <br>class client&nbsp; <br>{&nbsp; <br>private:&nbsp; <br>&nbsp;&nbsp;&nbsp; sdk m_sdk;&nbsp; <br>public:&nbsp; <br>&nbsp;&nbsp;&nbsp; client()&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sdk.pEvent = MakeOpenDelegate(this, OnOpen2);&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; void Open()&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_sdk.Open();&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; void OnOpen()&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"Open event fired"&lt;&lt;endl;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; void OnOpen2(int t, string str)&nbsp; <br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"Open event fired, Param = "&lt;&lt;t&lt;&lt;"param2 = "&lt;&lt;str.c_str()&lt;&lt;endl;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>};&nbsp; <br>*/&nbsp; </p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/gisfarmer/archive/2009/04/13/4068283.aspx">http://blog.csdn.net/gisfarmer/archive/2009/04/13/4068283.aspx</a></p>
<img src ="http://www.cppblog.com/ifensin/aggbug/95073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-09-02 10:16 <a href="http://www.cppblog.com/ifensin/archive/2009/09/02/95073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++常用数据类型转换详解</title><link>http://www.cppblog.com/ifensin/archive/2009/08/30/94814.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Sun, 30 Aug 2009 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/08/30/94814.html</guid><wfw:comment>http://www.cppblog.com/ifensin/comments/94814.html</wfw:comment><comments>http://www.cppblog.com/ifensin/archive/2009/08/30/94814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ifensin/comments/commentRss/94814.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ifensin/services/trackbacks/94814.html</trackback:ping><description><![CDATA[我们先定义一些常见类型变量借以说明：<br><br><code>int i = 100;<br>long l = 2001;<br>float f=300.2;<br>double d=12345.119;<br>char username[]=＂女侠程佩君＂;<br>char temp[200];<br>char *buf;<br>CString str;<br>_variant_t v1;<br>_bstr_t v2;</code><br>　　一、其它数据类型转换为字符串<br><br>　　短整型（int）<br><br><code>itoa（i,temp,10）;///将i转换为字符串放入temp中,最后一个数字表示十进制<br>itoa（i,temp,2）; ///按二进制方式转换 </code><br>　　长整型（long）<br><br><code>ltoa（l,temp,10）;</code><br>　　二、从其它包含字符串的变量中获取指向该字符串的指针<br><br>　　CString变量<br><br><code>str = ＂2008北京奥运＂;<br>buf = （LPSTR）（LPCTSTR）str; </code><br>　　BSTR类型的_variant_t变量<br><br><code>v1 = （_bstr_t）＂程序员＂;<br>buf = _com_util::ConvertBSTRToString（（_bstr_t）v1）;</code><br>　　三、字符串转换为其它数据类型<br><br><code>strcpy（temp,＂123＂）; </code><br>　　短整型（int）<br><br><code>i = atoi（temp）; </code><br>　　长整型（long）<br><br><code>l = atol（temp）; </code><br>　　浮点（double）<br><br><code>d = atof（temp）;</code><br>　　四、其它数据类型转换到CString<br><br>　　使用CString的成员函数Format来转换,例如:<br><br>　　整数（int）<br><br><code>str.Format（＂%d＂,i）; </code><br>　　浮点数（float）<br><br><code>str.Format（＂%f＂,i）; </code><br>　　字符串指针（char *）等已经被CString构造函数支持的数据类型可以直接赋值 <br><br><code>str = username;</code><br>　　五、BSTR、_bstr_t与CComBSTR<br><br>　　CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。<br><br>char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR（＂数据＂）;///使用前需要加上头文件comutil.h<br><br>　　反之可以使用<br><br><code>char *p=_com_util::ConvertBSTRToString（b）;</code><br>　　六、VARIANT 、_variant_t 与 COleVariant<br><br>　　VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。<br><br>　　对于VARIANT变量的赋值：首先给vt成员赋值，指明数据类型，再对联合结构中相同数据类型的变量赋值，举个例子：<br><br><code>VARIANT va;<br>int a=2001;<br>va.vt=VT_I4;///指明整型数据<br>va.lVal=a; ///赋值</code><br>　　对于不马上赋值的VARIANT，最好先用Void VariantInit（VARIANTARG FAR* pvarg）;进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:<br><br><code>unsigned char bVal; VT_UI1 <br>short iVal; VT_I2 <br>long lVal; VT_I4 <br>float fltVal; VT_R4 <br>double dblVal; VT_R8 <br>VARIANT_BOOL boolVal; VT_BOOL <br>SCODE scode; VT_ERROR <br>CY cyVal; VT_CY <br>DATE date; VT_DATE <br>BSTR bstrVal; VT_BSTR <br>IUnknown FAR* punkVal; VT_UNKNOWN <br>IDispatch FAR* pdispVal; VT_DISPATCH <br>SAFEARRAY FAR* parray; VT_ARRAY|* <br>unsigned char FAR* pbVal; VT_BYREF|VT_UI1 <br>short FAR* piVal; VT_BYREF|VT_I2 <br>long FAR* plVal; VT_BYREF|VT_I4 <br>float FAR* pfltVal; VT_BYREF|VT_R4 <br>double FAR* pdblVal; VT_BYREF|VT_R8 <br>VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL <br>SCODE FAR* pscode; VT_BYREF|VT_ERROR <br>CY FAR* pcyVal; VT_BYREF|VT_CY <br>DATE FAR* pdate; VT_BYREF|VT_DATE <br>BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR <br>IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN <br>IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH <br>SAFEARRAY FAR* FAR* pparray; VT_ARRAY|* <br>VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT <br>void FAR* byref; VT_BYREF </code><br>　　 _variant_t是VARIANT的封装类，其赋值可以使用强制类型转换，其构造函数会自动处理这些数据类型。<br><br>　　例如：<br><br><code>long l=222;<br>ing i=100;<br>_variant_t lVal（l）;<br>lVal = （long）i;</code><br>　　COleVariant的使用与_variant_t的方法基本一样，请参考如下例子：<br><br><code>COleVariant v3 = ＂字符串＂, v4 = （long）1999;<br>CString str =（BSTR）v3.pbstrVal;<br>long i = v4.lVal;</code><br>　　七、其它<br><br>　　对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据（DWORD）分解成两个16位数据（WORD）,例如：<br><br><code>LPARAM lParam;<br>WORD loValue = LOWORD（lParam）;///取低16位<br>WORD hiValue = HIWORD（lParam）;///取高16位 </code><br>　　对于16位的数据（WORD）我们可以用同样的方法分解成高低两个8位数据（BYTE）,例如:<br><br><code>WORD wValue;<br>BYTE loValue = LOBYTE（wValue）;///取低8位<br>BYTE hiValue = HIBYTE（wValue）;///取高8位 </code>
<img src ="http://www.cppblog.com/ifensin/aggbug/94814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-08-30 17:35 <a href="http://www.cppblog.com/ifensin/archive/2009/08/30/94814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC常用数据类型及其转换</title><link>http://www.cppblog.com/ifensin/archive/2009/07/26/91226.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Sun, 26 Jul 2009 02:47:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/07/26/91226.html</guid><wfw:comment>http://www.cppblog.com/ifensin/comments/91226.html</wfw:comment><comments>http://www.cppblog.com/ifensin/archive/2009/07/26/91226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ifensin/comments/commentRss/91226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ifensin/services/trackbacks/91226.html</trackback:ping><description><![CDATA[<p>我们先定义一些常见类型变量借以说明 </p>
<p>int i = 100; <br>long l = 2001; <br>float f=300.2; <br>double d=12345.119; <br>char username[]="MediX医用计算与数据系统"; <br>char temp[200]; <br>char *buf; <br>CString str; <br>_variant_t v1; <br>_bstr_t v2; </p>
<p>一、其它数据类型转换为字符串 </p>
<p>短整型(int) <br>itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 <br>itoa(i,temp,2); ///按二进制方式转换 <br>长整型(long) <br>ltoa(l,temp,10); </p>
<p><br>二、从其它包含字符串的变量中获取指向该字符串的指针 </p>
<p>CString变量 <br>str = "2008北京奥运"; <br>buf = (LPSTR)(LPCTSTR)str; <br>BSTR类型的_variant_t变量 <br>v1 = (_bstr_t)"程序员"; <br>buf = _com_util::ConvertBSTRToString((_bstr_t)v1); </p>
<p>三、字符串转换为其它数据类型 <br>strcpy(temp,"123"); </p>
<p>短整型(int) <br>i = atoi(temp); <br>长整型(long) <br>l = atol(temp); <br>浮点(double) <br>d = atof(temp); </p>
<p>四、其它数据类型转换到CString <br>使用CString的成员函数Format来转换,例如: </p>
<p>整数(int) <br>str.Format("%d",i); <br>浮点数(float) <br>str.Format("%f",i); <br>字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 <br>str = username; </p>
<p>五、BSTR、_bstr_t与CComBSTR </p>
<p>CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。 <br>char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h <br>反之可以使用char *p=_com_util::ConvertBSTRToString(b); </p>
<p><br>六、VARIANT 、_variant_t 与 COleVariant </p>
<p>VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 <br>对于VARIANT变量的赋值：首先给vt成员赋值，指明数据类型，再对联合结构中相同数据类型的变量赋值，举个例子： <br>VARIANT va; <br>int a=2001; <br>va.vt=VT_I4;///指明整型数据 <br>va.lVal=a; ///赋值 </p>
<p>对于不马上赋值的VARIANT，最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: </p>
<p>unsigned char bVal; VT_UI1 <br>short iVal; VT_I2 <br>long lVal; VT_I4 <br>float fltVal; VT_R4 <br>double dblVal; VT_R8 <br>VARIANT_BOOL boolVal; VT_BOOL <br>SCODE scode; VT_ERROR <br>CY cyVal; VT_CY <br>DATE date; VT_DATE <br>BSTR bstrVal; VT_BSTR <br>IUnknown FAR* punkVal; VT_UNKNOWN <br>IDispatch FAR* pdispVal; VT_DISPATCH <br>SAFEARRAY FAR* parray; VT_ARRAY|* <br>unsigned char FAR* pbVal; VT_BYREF|VT_UI1 <br>short FAR* piVal; VT_BYREF|VT_I2 <br>long FAR* plVal; VT_BYREF|VT_I4 <br>float FAR* pfltVal; VT_BYREF|VT_R4 <br>double FAR* pdblVal; VT_BYREF|VT_R8 <br>VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL <br>SCODE FAR* pscode; VT_BYREF|VT_ERROR <br>CY FAR* pcyVal; VT_BYREF|VT_CY <br>DATE FAR* pdate; VT_BYREF|VT_DATE <br>BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR <br>IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN <br>IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH <br>SAFEARRAY FAR* FAR* pparray; VT_ARRAY|* <br>VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT <br>void FAR* byref; VT_BYREF </p>
<p>_variant_t是VARIANT的封装类，其赋值可以使用强制类型转换，其构造函数会自动处理这些数据类型。 <br>例如： <br>long l=222; <br>ing i=100; <br>_variant_t lVal(l); <br>lVal = (long)i; </p>
<p>COleVariant的使用与_variant_t的方法基本一样，请参考如下例子： <br>COleVariant v3 = "字符串", v4 = (long)1999; <br>CString str =(BSTR)v3.pbstrVal; <br>long i = v4.lVal; </p>
<p>七、其它 </p>
<p>对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如： <br>LPARAM lParam; <br>WORD loValue = LOWORD(lParam);///取低16位 <br>WORD hiValue = HIWORD(lParam);///取高16位 <br>对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如: <br>WORD wValue; <br>BYTE loValue = LOBYTE(wValue);///取低8位 <br>BYTE hiValue = HIBYTE(wValue);///取高8位&nbsp;&nbsp; </p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/icycoffee/archive/2008/02/27/2125360.aspx">http://blog.csdn.net/icycoffee/archive/2008/02/27/2125360.aspx</a></p>
<img src ="http://www.cppblog.com/ifensin/aggbug/91226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-07-26 10:47 <a href="http://www.cppblog.com/ifensin/archive/2009/07/26/91226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C C++相关网址</title><link>http://www.cppblog.com/ifensin/archive/2009/07/25/91154.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Sat, 25 Jul 2009 10:31:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/07/25/91154.html</guid><wfw:comment>http://www.cppblog.com/ifensin/comments/91154.html</wfw:comment><comments>http://www.cppblog.com/ifensin/archive/2009/07/25/91154.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ifensin/comments/commentRss/91154.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ifensin/services/trackbacks/91154.html</trackback:ping><description><![CDATA[<font face=Tahoma size=2>C函数实例参考手册&nbsp; </font><a href="http://www.codeguru.cn/CPP/CExample/">http://www.codeguru.cn/CPP/CExample/</a><br>CodeGuruCn&nbsp; <a href="http://www.codeguru.cn/">http://www.codeguru.cn/</a><br>CodeGurn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.codeguru.com/">http://www.codeguru.com/</a><br>CodeProject&nbsp;&nbsp; <a href="http://www.codeproject.com/">http://www.codeproject.com</a><br>C++搜索&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.koders.com/?s=strlen&amp;scope=FP1TSL7HMVAHHECG6GX2F1PG2F&amp;la=C">http://www.koders.com/?s=strlen&amp;scope=FP1TSL7HMVAHHECG6GX2F1PG2F&amp;la=C</a><br>嵌入式研究网&nbsp; <a href="http://www.cnemb.com/">http://www.cnemb.com/</a><br>ChinaUnix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.chinaunix.net/">http://www.chinaunix.net/</a><br>VC开源项目 <a href="http://www.codeproject.com/KB/cpp/OpenSource_VC_MFC.aspx">http://www.codeproject.com/KB/cpp/OpenSource_VC_MFC.aspx</a><br>C C++源代码下载赛迪网 <a href="http://bbs.java.ccidnet.com/thread.php?fid=64">http://bbs.java.ccidnet.com/thread.php?fid=64</a><br>VC在线 <a href="http://www.vczx.com/">http://www.vczx.com/</a><br>VC知识库 <a href="http://www.vckbase.com/">http://www.vckbase.com/</a><br>Visual C++开发指南 <a href="http://www.vchelp.net/services/about_us/index2.asp">http://www.vchelp.net/services/about_us/index2.asp</a><br>孟子E章&nbsp; <a href="http://blog.csdn.net/net_lover/">http://blog.csdn.net/net_lover/</a><br>VC DIY俱乐部&nbsp; <a href="http://www.diybl.com/course/3_program/vc/">http://www.diybl.com/course/3_program/vc/</a><br>编程中国 <a href="http://www.bccn.net/Article/kfyy/vc/jszl/Index.html">http://www.bccn.net/Article/kfyy/vc/jszl/Index.html</a><br><br>
<img src ="http://www.cppblog.com/ifensin/aggbug/91154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-07-25 18:31 <a href="http://www.cppblog.com/ifensin/archive/2009/07/25/91154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++基本数据类型的转移</title><link>http://www.cppblog.com/ifensin/archive/2009/07/25/91152.html</link><dc:creator>ifensin</dc:creator><author>ifensin</author><pubDate>Sat, 25 Jul 2009 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/ifensin/archive/2009/07/25/91152.html</guid><wfw:comment>http://www.cppblog.com/ifensin/comments/91152.html</wfw:comment><comments>http://www.cppblog.com/ifensin/archive/2009/07/25/91152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ifensin/comments/commentRss/91152.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ifensin/services/trackbacks/91152.html</trackback:ping><description><![CDATA[<strong><font size=4><font color=#ff0000>#include &lt;string&gt;<br>// 使用CString必须使用MFC，并且不可包含&lt;windows.h&gt;<br></font>#define _AFXDLL<br>#include &lt;afx.h&gt;<br>using namespace std;<br>//----------------------------------------------------------------------------------<br>//将 单字节char* 转换为 宽字节 wchar*<br>inline wchar_t* AnsiToUnicode( const char* szStr )<br>{<br>int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );<br>if (nLen == 0)<br>{<br>&nbsp;&nbsp; return NULL;<br>}<br>wchar_t* pResult = new wchar_t[nLen];<br>MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );<br>return pResult;<br>}<br>//----------------------------------------------------------------------------------<br>// 将 宽字节wchar_t* 转换 单字节char*<br>inline char* UnicodeToAnsi( const wchar_t* szStr )<br>{<br>int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );<br>if (nLen == 0)<br>{<br>&nbsp;&nbsp; return NULL;<br>}<br>char* pResult = new char[nLen];<br>WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );<br>return pResult;<br>}<br>//----------------------------------------------------------------------------------<br>// 将单字符 string 转换为宽字符 wstring<br>inline void Ascii2WideString( const std::string&amp; szStr, std::wstring&amp; wszStr )<br>{<br>int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );<br>wszStr.resize(nLength);<br>LPWSTR lpwszStr = new wchar_t[nLength];<br>MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );<br>wszStr = lpwszStr;<br>delete [] lpwszStr;<br>}<br>//----------------------------------------------------------------------------------<br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>char*&nbsp;&nbsp; pChar = "我喜欢char";<br>wchar_t* pWideChar = L"我讨厌wchar_t";<br>wchar_t&nbsp;&nbsp; tagWideCharList[100] ;<br>char&nbsp;&nbsp; ch = 'A';<br>char&nbsp;&nbsp; tagChar[100] = {NULL};<br>CString&nbsp;&nbsp; cStr;<br>std::string str;</font></strong>
<p><strong><font size=4>// 注：设置语言环境以便输出WideChar<br>setlocale(LC_ALL,"chs");</font></strong></p>
<p><strong><font size=4>// 注： char* 转换 wchar_t*<br>// 注： wchar_t 未重载 &lt;&lt; ，所以不可使用 cout &lt;&lt; 输出<br>pWideChar = AnsiToUnicode( pChar );<br>// 注：printf("%ls") 和 wprintf(L"%s") 一致<br>printf( "%ls\n", pWideChar );</font></strong></p>
<p><strong><font size=4>// 注：wchar_t* 转换 wchar_t[]<br>wcscpy ( tagWideCharList, pWideChar );<br>wprintf( L"%s\n", tagWideCharList );</font></strong></p>
<p><strong><font size=4>// 注：wchar_t[] 转换 wchar_t*<br>pWideChar = tagWideCharList;<br>wprintf( L"%s\n", pWideChar );</font></strong></p>
<p><strong><font color=#0000ff size=4>// 注：char 转换 string<br>str.insert( str.begin(), ch );<br>cout &lt;&lt; str &lt;&lt; endl;</font></strong></p>
<p><strong><font size=4>// 注：wchar_t* 转换 string<br>pWideChar = new wchar_t[str.length()];<br>swprintf( pWideChar, L"%s", str.c_str());<br>wprintf( L"%s\n", pWideChar );</font></strong></p>
<p><strong><font color=#ff6600 size=4>// 注：string 转换 char*<br>pChar = const_cast&lt;char*&gt;(str.c_str());<br>cout &lt;&lt; pChar &lt;&lt; endl;</font></strong></p>
<p><strong><font size=4>// 注：char* 转换 string<br>str = std::string(pChar);<br>// 注： cout 的 &lt;&lt; 重载了string, 若printf 的话必须 printf("%s", str.c_str()); <br>//&nbsp;&nbsp; 而不可 print( "%s", str ); 因为 str 是个 string 类<br>cout &lt;&lt; str &lt;&lt; endl;</font></strong></p>
<p><strong><font size=4>// 注：string 转换 char[]<br>str = "无聊啊无聊";<br>strcpy( tagChar, str.c_str() );<br>printf( "%s\n", tagChar );</font></strong></p>
<p><strong><font size=4>// 注：string 转换 CString;<br>cStr = str.c_str();</font></strong></p>
<p><strong><font size=4>// 注：CString 转换 string <br>str = string(cStr.GetBuffer(cStr.GetLength()));</font></strong></p>
<p><strong><font size=4>// 注：char* 转换 CString<br>cStr = pChar;</font></strong></p>
<p><strong><font size=4>// 注：CString 转换 char*<br>pChar = cStr.GetBuffer( cStr.GetLength() );</font></strong></p>
<p><strong><font size=4>// 注：CString 转换 char[]<br>strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));</font></strong></p>
<p><strong><font size=4>// 注：CString 转换 wchar_t*<br>pWideChar = cStr.AllocSysString();<br>printf( "%ls\n", pWideChar );<br>}</font></strong></p>
<img src ="http://www.cppblog.com/ifensin/aggbug/91152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ifensin/" target="_blank">ifensin</a> 2009-07-25 18:18 <a href="http://www.cppblog.com/ifensin/archive/2009/07/25/91152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>