电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

VC技术范文

来源:莲生三十二作者:开心麻花2025-09-191

VC技术范文(精选12篇)

VC技术 第1篇

OpenGL显示三维图形流程图如图1所示。

1 纹理贴图技术

纹理贴图技术也叫纹理映射技术, 在三维图形中,纹理映射(Texture Mapping)的方法运用得很广,尤其描述具有真实感的物体。传统的几何造型只能表示景物的形状,无法描述景物表面的微观细节,而利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面丰富的纹理细节的目的,提高计算机生成图形的真实性。另一方面,采用纹理映射的方法可以大大地简化建模的过程。纹理贴图类型主要有材质贴图、Mip贴图、凹凸贴图、动态材质贴图等。材质贴图是将一张已有的图像直接贴到物体的表面。Mip贴图依据不同的精度要求,使用不同版本的材质图像进行贴图。凹凸贴图是一种在三维场景中模拟粗糙表面的贴图技术。它将深度的变化保存在一张贴图中,然后将对三维物体进行混合贴图处理,最后生成具有凹凸感的贴图效果。动态材质贴图技术可产生较好的材质贴图效果。

2 OpenGL纹理贴图

纹理映射是将指定图像的一部分映射到允许进行纹理映射的每个图段上。这种映射伴随着使用一幅图像的颜色到某一图段坐标所指示的位置上并修改该图段的RGBA颜色。但要特别注意的是,在OpenGL中,纹理映射仅在RGBA模式下说明,在颜色索引模式下,它的使用未作定义。概括地说,使用纹理绘制的一般步骤为:①定义纹理;②控制滤波;③说明映射方式;④绘制场景,给出顶点的纹理坐标和几何坐标。

2.1 定义纹理

在真实感图形学中,我们可以用如下的两种方法来定义纹理:

2.1.1 图像纹理

将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。用一个MN的二维数组存放一幅数字化的图像,用插值法构造纹理函数,然后把该二维图像映射到三维的物体表面上。为了实现这个映射,就要建立物体空间坐标(x,y,z)和纹理空间坐标(u,v)之间的对应关系,这相当于对物体表面进行参数化,反求出物体表面的参数后,就可以根据(u,v)得到该处的纹理值,并用此值取代光照明模型中的相应项。

两个经常使用的映射方法是圆柱面映射和球面映射。对于圆柱面纹理映射,由圆柱面的参数方程定义,可以得到纹理映射函数。如果参数方程如下所示:

那么,对给定圆柱面上一点(x,y,z),可以用下式反求参数:

同样的,对于球面纹理映射,由球面参数方程:

对给定球面上一点(x,y,z),可以用下式反求参数:

2.1.2 函数纹理

用数学函数定义简单的二维纹理图案,如方格地毯。或用数学函数定义随机高度场,生成表面粗糙纹理即几何纹理。例如:

它的纹理图像模拟国际象棋上黑白相间的方格,如图2所示。一般来说, 图像纹理是较为常用的纹理定义方法。其实现函数为glTexImage2D( )。该函数的原型如下:

void glTexImage2D(GLenum target, GLint level, GLenum components, GLsizei width, GLsizei height, Glint border,GLenum format, GLenum type, const GLvoid* pixels);

其中:target指定纹理映射,此处必须是GL_TEXTURE_2D;level指定纹理图像分辨率的级数,当只有一种分辨率时,level=0;Components是选择用于调整和混合的成分; width和height分别指定纹理图像的宽和高,必须是2n,n为正数; Border为边界的宽度,必须是0和1; format和type分别指定纹理映射的格式和数据类型; Pixels指定一个指针,指向纹理数据在内存中的位置。

2.2 控制滤波

纹理图像通常是矩形,但是被映射到一个多边形或曲面上和变换为屏幕坐标后,纹理地单个像素很难与屏幕上的象素对应。根据所使用的变换和所用的纹理映射,屏幕上的单个像素可能对应于纹理中单个元素的一部分(放大滤波)或对应于纹理中多个元素(缩小滤波)。

在OpenGL中,控制缩小和放大滤波是采用函数glTexParameter()来实现的。该函数的原型为:

void glTexParameter{ f. i } ( GLenum target, GLenum pname, TYPE param) ;

其中:target参数为目标纹理, 必须是GL_TEXTURE_2D,pname指定一个单值纹理参数的符号名,取值有GL_TEXTURE_MIN_FILTER。

GL_TEXTURE _MAG_FILTER、GL_TEXTUREWRAP_S

GL_TEXTURE_WRAP_T;

param参数的取值要根据pname而定。

2.3 说明映射方式

在一般情况下,纹理图像是直接作为颜色画到多边形上的,实际上,在OpenGL中,还可以用纹理中的值来调整多边形甚至曲面原本的颜色,或者用纹理图像中的颜色与多边形甚至曲面原本的颜色进行融合,在融合操作中,包含了2个因子,一个因子是源因子,另一个是目的因子,设源融合因子为(Sr,Sg,Sb,Sa),目的融合因子为(Dr,Dg,Db,Da),源颜色为(RS,GS,BS,AS),目的颜色为(Rd,Gd,Bd,Ad),则融合后的颜色为:

(RS Sr+Rd Dr , GS Sg+Gd Dg , BS Sb+Bd Db ,AS Sa+Ad Da)

最终的颜色分量都被压缩到0和1之间。通过调用glEnable(GL_BLEND)来使颜色融合激活,在OpenGL用于纹理贴图方式的函数为glTexEnv *(),该函数的原型为:

void glTexEnv{ f. i } (GLenum target, GLenum pname, TYPE param);

其中target指定一个纹理环境,必须为GL_TEXTURE_ENV。pname指定一个纹理环境的符号名,可以为GL_TEXTURE_ENV_MODE或GL_TEXTURE_ENV_MODE,param参数的取值要根据pname而定。

2.4 定义纹理坐标

纹理坐标控制纹理图像中的像素怎样映射到物体。定义纹理的坐标可以用齐次坐标,即(s,t,r,q),来自定义纹理坐标,值得注意的是纹理映射一定要对应成比例,如图3所示,设长方形的宽/高(w/h)=3/4,绘图深度为d,则定义纹理坐标应如下,否则纹理就会发生扭曲。

OpenGL函数为glTexCoord()。也可以自动产生纹理数据,OpenGL函数为glTexGen(); 函数原型为:

void glTexGen{ i f d} v (GLenum coord, GLnum pname, TYPE param);其中:coord 指定要产生的一个纹理坐标,可以是GL_S,GL_T,GL_R或GL_Q,pname指定一个纹理坐标生成函数的符号名,param指定一个指向纹理生成参数数组的指针。

3 基于VC的OpenGL中的纹理贴图

3.1 利用Visual C++6.0建立OpenGL绘制框架

其基本步骤如下:

(1) 创建一新的MFC文档/视图结构的工程,项目名为OTexture,其他步骤默认设置;

(2) 在工程中的设置选项加入OpenGL的连接库:opengl32.lib glu32.lib glaux.lib;

(3) 添加头文件到COTextureView.h中:

(4) 在COTextureView类中增加成员变量:

(5) 在COTextureView类中增加成员函数:

(6) 在COTextureView类增加Windows消息句柄函数:

(7) 重载以下函数:

编写纹理贴图相关的自定义成员函数为TexMap (),其编辑如下:

在上述重载的函数OnDraw()中调用此纹理:

4 应用实例

在Windows编程和图像处理中,位图是我们经常要处理的图形图像,将位图显示在指定的客户区是Windows编程的基本要求。位图可以作为图像合成的背景,也可以作为一种纹理贴在物体的表面。例如,对于美丽的夜空,若不使用纹理映射,则每个闪亮的星星都必须用多边形来绘制,整个夜景需要成千上万个多边形才能构造出来,这样使图像过于光滑和规则,而且缺乏动态的效果而不够真实。事实上采取纹理映射的方法会取得更好的效果。

如图5~图8为一些实际应用的实例:

5 结束语

利用OpenGL强大的图形功能,可以轻松地实现逼真的贴图模型。在此基础上,运用VC++的MFC应用程序模式,可对OpenGL产生的模型进行更进一步的控制和变化。同时提供给用户一个友好的操作环境,这在当今的时尚编程中是不可或缺的。

摘要:纹理贴图是真实感图形制作的一个重要部分,OpenGL作为图形与硬件的接口,提供了丰富的图形函数。本文简要介绍了OpenGL的纹理贴图技术及其在VC中的基本操作步骤。并通过最后的实例验证了纹理贴图技术在绘制真实感图形中的必要性。

关键词:纹理贴图,OpenGL,VC

参考文献

[1]唐泽圣,周嘉玉,李新友.计算机图形学基础.北京:清华大学出版社,1995.

[2]向世明.OpenGL编程与实例.北京:电子工业出版社,1999.

[3]Kruglinski D J.Visual C++技术内幕(第四版).北京:清华大学出版社,2001.

[4]Ngung Sing Kiong.Robust stabilization of a class of time-delay nonlinear systems.IEEETrans on AC,2000,45(4):756~762

[5]Yazdizadeh A,Khorasani K,Patel R V.Identification of a two-link flexible manipulator using adaptive time delay neural networks.IEEE Transactions on Systems,Man,and Cybernetics,Part B:Cybernetics,2000,30(1):165~172

[6]Makoudi M,Radouane L.Robust decentralized adaptive control for non-minimum phase systems with unknown and/or time var-ying delay Automatica,1999,35(8):1417~1426

[7]Tian Y C,Gao F.Adaptive control of chaotic continuous-time systems with delay.Physica D:Nonlinear Phenomena,1998,117(1-4):1~12

[8]Logemann H,Townley S.Adaptive integral control of time-delay systems.IEE Proceedings:Control theory and Applications,1997,144(6):531~536

[9]Toudeft Abdelmoumene,Gallinari Patrick.Neural and adaptive controllers for a non-minimum phase varying time-delay sys-tem.Artificial Intelligence in Engineer,1997,11(4):431~439

[10]Mahmoud,Magdi S.Adaptive control of a class of time-delay systems with uncertain parameters.International Journal of Con-trol,1996,63(5):937~950

[11]Polycarpou MM.Stable Adaptive neural network control strategy for nonlinear systems.IEEE Trans on Auto Contr,1996,41(2):447~451

VC技术 第2篇

英文里有一个说法叫“Burden of Proof”,意思是“举证的重担”。创业者们,你的“故事”已经打动了VC,他们和你签署了“Termsheet”也就意味着VC准备投资你的基本条件都已谈妥,不过,在起草最终的投资协议以前,你还必须拿出真实的证据来让VC看看,到底你说的故事和你的实际情况是否天衣无缝、完全一致?

“尽职调查”顾名思义,也就是VC要尽到自己的责任,对你和你的业务进行周全的真实性调查,确保其中没有水分、没有漏洞、没有瑕疵、没有定时炸弹。至于“尽职调查”的重要性,美国华盛顿大学8月发表的一份VC研究报告显示,50%的早期VC投资项目的失败原因都和投资人没有进行充分的“尽职调查”直接有关。

每一个来找钱的创业者都期望VC的手脚能快一点儿,恨不得VC和你签了Termsheet就把保险箱钥匙丢给你让你自己去取钱。创业者们都以为VC掌控着投资的时间,错也,是你,创业者自己,真正掌握着VC的钱进到你公司账号上的速度快慢。

此话怎讲?VC里的投资经理们都知道“尽职调查”是一件周密而细致的工作,对此不少创业者丈二和尚摸不着头脑,VC要求看的文件、材料,要么是要啥没啥,要么就是拖拖拉拉想蒙混过关,有时候会来来回回会折腾上它好几个月。也就是说,“尽职调查”的速度VC是控制不了的,快慢都掌握在创业者的手中,理想的过程应该是:VC要的文件啊、资料啊......反正VC要啥你就立刻给啥,有就有,没就没,如实招来,切忌拖延。VC这时候的角色就像联邦调查局的侦探,你如果不配合,不帮助他(她)迅速完成“尽职调查”,过不了这一道防线,你还是拿不到钱。

VC的“马奇诺防线”,始于他们开给你的一份“尽职调查”清单。清单短的几十项内容,长的几百项内容,我所见过的最长的“尽职调查清单”有900多项内容......别担心,早期创业公司的“尽职调查”清单大概最多的也只有百十来条而已。总之,VC要把你的衣服、裤子都剥光了,让你暴露在光天化日下,接受全面搜身检查。创业者们,建议你别扭扭捏捏怕不好意思、等着别人来催你脱裤子,自己动手赶快 了、主动擦干净自己的屁股,洗去身上的污迹,出场前再对着镜子仔细检查一遍,这样会大大加快“尽职调查”的成功概率和完成速度,以便让VC的钱能迅速打入你公司的帐户。

“尽职调查”的内容通常包括了但不限于以下六大方面:

1. 调查你的团队情况

2. 调查你的业务情况

3. 调查你的市场情况

4. 调查你的技术情况

5. 调查你的财务情况

6. 调查你的法务情况

A. 调查你的团队情况

说实话,虽然我们一再强调了在VC投资中团队、团队、还是团队的重要性,但是在“尽职调查”中对团队的调查倒好像是一份轻松活。创业者和VC在之前的多次沟通中,团队的问题绝对不可能少谈,这已经让VC多少了解了团队成员的方方面面。现在要你做的,就是把身份证复印件、学位证书复印件、你以前老板或同事对你大夸其辞的推荐信拿出来,再出示一下各位创始人的股份比例。仔细一点的VC可能还会要求提供主要团队的简历、过去十二个月中公司人员流动情况等等,做完了这些动作,团队的“尽职调查”也就差不多完事儿了......不难的吧?

(联邦调查局官员:VC团队的投资经理)

B. 调查你的业务情况

业务的尽职调查是个广泛的主题,从何开始呢?每个VC都会有自己的出发点。你知道我是创业者出身,所以我总喜欢单刀直入,第一个问题谈你的销售,口说无凭,你的销售订单呢?你的客户名单呢?拿出来看看吧?

你的业务能够规模化吗、能够持久吗?你和你的竞争对手处在同一条起跑线上,半年一年后,你们会谁胜谁负?你的企业内部治理呢,有管理流程吗?有量化的指标吗?这一切的一切,都需要你能提供些详细的佐证。

有时候“尽职调查”也是很容易对付的。举一个真实的例子:有一次,一个来自欧洲的VC对我们的一家公司进行“尽职调查”,VC要求看该公司日常工作管理的记录,公司安排找出了一堆日常的留档文件供他们审阅,因为都是中文的,老外们看不懂,但是其中一个老外注意到,这家公司的每一份周会记录上的日期都是阿拉伯数字的,他一算发现,这公司从来没有漏掉过一次周会,虽然没看懂记录的内容,但是一次不漏的周会记录说明了公司管理的严格,于是老外们连连点头:“过!”

(联邦调查局官员:VC团队的投资经理)

C. 调查你的市场情况

你大概很快会恍然大悟,其实你长篇阔论地写商业计划书中的那些关于市场的分析和预测,绝对是浪费时间!因为你们创业者总是把市场的未来机会吹得天花乱坠,来增加钓到VC的胜算概率,VC才不会轻而易举地上当受骗呢。即使当VC们决定投资你,他们还会独立地对市场进行“尽职调查”,VC的市场分析工作是由专业人士来做的,是中立的,通常也是保守的。

不是都说“手机电视”在北京奥运会时会有爆炸性的增长,中国的老百姓都会一个个躲在家里在手机上看奥运......事实呢?爆发了吗?你们当中有几个人8月8日晚上在手机上看“巨人的脚步”??

直说吧,商业计划书里“市场分析”那一章其实我基本上是不读的,但是你缺了这一章也不行,那是你功课的一部分,给你自己做练习用的,而不是让我大开眼界的,

我才不会轻易地相信你的那些市场数据,尽管你也没有少用iResearch的那些绿色的图表(Henry、Lily:开开玩笑啦)。

VC有自己的信息渠道、可以花钱去买行业报告、可以去采访专家、请教行业中的CEO和董事长们......手段多着呢!

(联邦调查局官员:VC团队的投资分析师,以及外面特聘的行业专家)

D. 调查你的技术情况

相信这是你的看家本领和拿手好戏,VC看中你,也就是相信了你手里有绝招(当然,这里举的例子是技术性的公司,有些公司不是技术驱动型的,但是他们有独特的商业模式,那同样也是绝招)。

“尽职调查”是你亮剑的时刻,搬出你的专利啦、高新技术奖啦......VC再厉害,也是厉害不过你的,给VC上上课嘛,进一步增加他们对你的好感。

尽管你有充足证据,很多VC还会聘请资深的科学家、专家来出具独立的报告和评语,验证你的技术水准。看出来了吧,VC和你签的“Termsheet”不是一页空头文件,VC签了字就会开始产生费用,“尽职调查”中有人员成本、时间成本、差旅成本、第三方专家的成本......VC要是没有90%的信心来投资你的公司,才懒得给你出什么“Termsheet”呢!

(联邦调查局官员:VC团队的投资分析师,以及外面特聘的行业专家)

E. 调查你的财务情况

财务的尽职调查,可能要算是尽职调查中最重要的工作。它分为两大块:过去的财务数据和未来的财务预测。

- 之前的12个月的收入清单

- 资产负债表

- 现金流量表

- 月度经营状况

- 预算与实际情况

- 销售和毛利润细目分类:

- 以产品分类

- 以地域分类

- 过期应收账款的时间清单

- 不同产品及其在收入中的贡献

- 成本结构和收益率......不多罗列了,免得你又心烦。

过去的财务数据相对容易,会计事务所一审记就出来了。未来的财务数据会让你感到头痛,特别是在早期的创业公司中,它是创业者的软肋和心病。(请参阅拙博《创业者的鞭刑》)

(联邦调查局官员:VC团队的投资经理、以及权威的财务审计事务所,又是一笔高额成本!)

F. 调查你的法务情况

只要不是上市,你公司的法务尽职调查相对容易过关。无非是要你提供公司总部、子公司、控股公司, 关联公司的营业执照,原始执照以及法人身份证复印件各一份;外加公司章程、董事会决议、员工合约、知识产权保护条款、商标备案、正版软件购买凭证、诉讼记录......

(联邦调查局官员:VC团队的投资经理,以及VC内部的、或指定的第三方律师)

创业者们,当你有第一次经历“尽职调查”的时候,不妨来开始学习如何维护投资人的关系。注意过没有?大公司像Google,Yahoo,微软,IBM的网站上都有“IR”即“投资人关系”的一栏(IR=Investor Relation),记住:要无时无刻去照顾和关爱投资人的关系,这样才能保持财源的源源不断,才能防范你不至于哪一天也变成了杨致远。

教你一个小技巧:在开始“尽职调查”的时候,你要设法腾出一个小房间来,把所有“尽职调查”清单上的材料一份不少地全部收集完整,有条不紊地在小房间里安放好,然后在门上贴个条子“Data Room,闲人莫入”。这时候,向VC报告你已经列队完毕,敬请检阅。

千万不要让VC坐在你办公室里对你说“我要看公司过去的财务审计报告”,于是你通知你的会计像没了魂似的奔进来;VC又说“我要看员工聘用合约”,你马上叫人事经理大包小包地把员工档案搬进来,把你办公室顷刻间变成了王府井商厦,人来人往,川流不息......你应该让VC在Data Room里面安安静静地工作,并安排你的秘书不时去倒茶倒水、叫午餐叫外卖......信不信由你,照着这样做,说不定“尽职调查”一两天就能完成了。

当然,尽职调查可能会查出来不少问题,VC在注资前要把这些问题统统清理掉,因此VC常常还会提出一系列的注资条件,比如你老婆不能再当公司会计但可以做前台,你小舅子不再担任公司副总但可以去跑销售,去年前年公司避税在外走账欠的工商税款要补交掉,服务器里的盗版软件统统要删掉重装正版的......除非在尽职调查中发现了重大的问题或不可解决的问题,那么VC会直截了当地通知你,他们已经决定鸣金收兵,不打理此案了。比如说,在尽职调查中VC发现你有艾滋病、你的软件源代码是从你原来上班的公司里偷出来的、你和竞争对手之间有重大的法律纠纷还在等待法院判决......

悟出来了吗?融资是一个系统工程,VC也不是一群 。不是点一支烟、吐一口雾、拍拍脑袋5分钟就搞定的事情。

最后说明一下,“Termsheet”中的条款都是比较原则性的,有待律师进一步把它组织成正式的法律文件;“尽职调查”报告则是VC的内部文件,你是看不到的。但是在VC的钱到你手中之前,还有最后一关:投资协议。说实话,创业者们,当你攻下了诺曼底防线、攻下了马奇诺防线,剩下的停战协议(投资协议),其实都是些律师们手里的细软活儿,让他们在最后的文字细节上去咬文嚼字费喉舌吧......你呢,独自个儿出门吸口新鲜空气去吧,顺带悄悄地买一瓶好点儿的香槟。

VC技术 第3篇

在zPark Venture之前,李强曾和四个清华校友一起成立了清华企业家协会天使基金,规模在400多万美元,两年下来投了20多个项目,之后他离开,与另外两个合伙人一起创立了zPark Venture。这一次,资金有一半来自国内,至今已有25个华人LP,硅谷的华人精英几乎都能在这里找到。

专注高精尖

zPark Venture投资的第一个项目一波三折,是Facebook总监魏晓亮挖掘的、在硅谷做手机数据安全的华人创业项目Trustlook。当时zPark Venture已经准备进入,估值300万美元,还好心地介绍给了国内一个著名天使大佬发起的孵化器,但该孵化器一介入,就把估值推到了1000万美元。2012年圣诞节,Trustlook创始人张亮忽然接到这位大佬打来的电话:“不投了。”当时,张亮已经辞职,急得连夜打电话给李强,怎么办?李强对他说,他投不投跟我是两码事,我们有独立的判断。

对张亮的遭遇,李强有亲身经历。当年他和太太放弃北卡罗来纳州安逸的生活到硅谷后,也曾跟两个清华的同学创立过一个无线数据安全公司,一度被雅虎看中,但雅虎的沟通流程很慢,几经波折的过程,对创业者的资源是巨大的消耗。“创业者在这种关键时期最需要投资人的支持,我做了天使后,遇到这种情况绝对不会走,所以我们该怎么投还怎么投。”

当然经过这个小插曲,估值也回到了合理水平。Trustlook之后一直发展顺利,拿到金山投资后,估值翻了3~4倍。“投资人不签字,钱就不到位。如果当时我也要撤,这个团队就会伤元气,大家都会问出了什么问题?为什么李强不投了?为什么XXX也不投了?”

成立两年来,zPark Venture以每月至少投一个的频率,投了30个创业在硅谷的项目,其中华人创业项目占一半左右。几乎所有合伙人都有颇为强大的技术背景,不仅有大数据方面的专家,也有半导体专业出身的研究硬件、集成电路、工艺等等专家,还有生物医学方面的博士。

正因此,zPark Venture看项目火眼金睛,他们主投移动互联网、数据安全解决方案项目,也有少许可穿戴设备、人工智能、O2O项目等,都是轻资产、高技术、知识密集型的初创企业,“技术含量高”是团队最重要的投资标准之一。例如在高空中采集高清图像和视频信息的无人机公司Skycatch,在硅谷有很多做无人机硬件的公司,但系统集成却没人做好,一是电池续航能力不行,二是数据传输麻烦,但Skycatch却做到了自主采集数据和自动换电池,现在这家公司新一轮的融资已经在千万美元级别。

全华班

在美国人看来,硅谷一直没有太大变化,迎来一代又一代的创业者,但对华人来讲却不一样。李强1990年赴美,放弃了清华大学的学位。太太也是清华校友,在美国打拼已经拿到了终身教授资格,两人在北卡罗来纳州待了10年。2000年一次偶然出差到硅谷,发现好多清华同学在这里创业,大受震撼,“美国其他州绝对没有这种创业的氛围”,于是卖了北卡罗来纳州的别墅跑到硅谷住在一个公寓里重新开始,现在已经14年了。

经过在硅谷多年的努力,华人近两三年的地位提高了,在大企业的位置晋升很快,最高可以做到VP级别,跟前几年大多从事执行工作全然不同。拥有了高管地位意味着对整个公司的战略都有了解和指导。“所以华人本身的资源也丰富起来,社会地位、经济地位都上升到一个程度,华人开始有自己像样的生态圈了。” zPark Venture一方面帮助华人创业起步,另一方面通过早期投资,让有经济、社会地位的华人做自己的投资管理。“前几年报纸中缝都是招聘广告、民间治病,现在广告都换成天使投资了。这对硅谷的华人VC来说不是坏事,好项目国内都愿意以比较高的价格接手。”

zPark Venture处在硅谷两个生态圈之间,一个是华人创业圈,另一个是华人高管圈。以前在硅谷创业的华人很稀少,现在越来越多,成绩越来越好,已经不比其他很多种族差了。华人高管驻扎各大公司,一是让zPark Venture有了自己对大趋势独到的理解;二是熟悉并购,zPark Venture投资的公司,被Facebook、雅虎买走的可能性比其他公司大得多。但还有一个李强没有料到的优势给了他惊喜:“很多纯美国人创业的公司对中国市场抱着很大的期待。虽然我们在硅谷的年头很多了,但美国人还是希望靠我们的帮助进入中国。” zPark Venture也在加强和国内的VC合作,对硅谷的创业者来说,这是一个巨大的卖点。

投早期也要投中期

硅谷瞬息万变,每隔两三个月就会出现一个激动人心的故事。Nest创立4年,就以32亿美元卖给谷歌;Facebook买WhatsAPP花了190亿美元——一个很小的公司以巨大的估值被卖掉,这些故事不断地给创业者希望。但在李强看来,大公司的做法对投资人也是一个重要的暗示,比如谷歌买Nest即认可了未来的趋势是信息采集。这也有副作用,谷歌的竞争对手也要买类似的公司,导致其他公司的估值会有很大变化。“每次发生这种大事件,不仅对于硅谷有影响,对世界的影响都非常大,作为投资人必须马上意识到这一点。”

zPark Venture投资的几乎都是从纯早期步入早期阶段的项目,李强说,以前他们不会投超过25万美元。但现在经过两年的运作,可以将投资额增加到100万美元左右。zPark Venture也开始了新一轮融资,第二期规模在5000万美元左右。

做了两年早期投资,李强发现因为早期投资收益好,很多投资人愿意往早期走,或者在IPO前后进入,这让硅谷的投资分布呈现两极化趋势,导致针对A轮的融资变少。对zPark Venture来说,这是一个机会。“很多非常好的早期项目在A轮融资有困难,既然我们的团队有百里挑一的实力,为什么不多做一些A轮投资?”

VC技术 第4篇

插件的本质是在不修改程序主体的情况下加强软件功能,当插件的接口被公开时,任何公司或个人都可以自己制作插件来解决一些操作上的不便或增加一些功能。比如最新版本ENCounter,允许其他的软件接驳进来,驻留的程序可以只是ENCounter一个,但是当联网成功时,ENCounter除了可以记费外,还能呼叫其他的插件模块来执行诸如检查邮件等操作,这样比驻留一个ENCounter邮件检查软件更有效。

1 定义接口函数

插件原理就是通过统一的程序接口来调用不同的模块以实现不同功能的调用。

插件技术的实现,一般都是先定义好一个接口结构,这个结构包含了主程序要引用的接口函数的指针。当然,这些接口函数的格式必须是事先定义好了的。而在插件Dll中一般只有一个导出函数,利用这个导出函数我们可以得到接口结构的指针,这样主程序就可以通过指针来使用插件模块中的功能。

举个例子,先定义好包含接口函数的结构:

这样,我们就定义好了一个插件的接口。在插件Dll中还可以这样实现申明和定义接口函数。

这样,我们就定义好了接口函数。但还必须把它们加入到接口结构中去。

2 接口结构

再定义一个接口结构并同时初始化:

这样,一个插件dll的接口功能就完成了,当然,你需要在接口函数中添加你的插件功能代码。当主程序通过动态加载Dll映射导出函数地址时就可以通过导出函数。

Get Plug In Module Function()得到一个Plug In Module结构的指针。而Plug In Moudle包含插件功能的功能函数地址,这样就可以引用以下这些插件函数的功能。

3 小结

插件是独立开发的程序模块,它能够动态地插入到系统中去,并且可以被自由的删除和替换,因此它能够提高软件开发的并行性和开发效率,增强应用程序的可运行性和可维护性。

参考文献

[1]文海良.效果器插件:技术与应用(上、下)[M].湖南文艺出版社,2008.

[2]MatthewKeefe,Java and Flex Integration Bible[M].Wiley Publishing,Inc.2007.

VC面试问题 第5篇

cdecl:c declare(C调用约定)的缩写,是C和C++程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,由调用者把参数弹出栈,对于传送参数的内存栈是由调用者来维护的,正因为如此,只有这种调用方式可实现个数不定的入口参数(可变参数)。

stdcall:是pascal程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,被调用的函数在返回前清理传送参数的内存栈。

上两者的主要区别是前者由调用者清理栈,后者由被调用的函清理栈。当然函数名的修饰部分也是不同的。

fastcall:采用寄存器传递参数,特点就是快了。

2.C++中用模板类的好处:

(1)可用来创建动态增长和减小的数据结构

(2)它是类型无关的,因此具有很高的可复用性。

(3)它在编译时而不是运行时检查数据类型,保证了类型安全

(4)它是平台无关的,可移植性

(5)可用于基本数据类型

3.SendMessage和postMessage,GetMessage和peekMessage有什么区别?

postMessage和SendMessage的区别主要是在于是否等待其他程序处理消息,postMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行,而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,postMessage的返回值表示postMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。

peekMessage和GetMessage主要有以下区别:

1.GetMessage将等到有合适的消息时才返回,而peekMessage只是撇下一个消息队列。

2. GetMessage会将消息从队列中删除,而peekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。

创建线程的方式有三种,MFC的AfxBeginThread,win32ApI的CreateThread和C RunTime的_beginthreadex.其中AfxBeginThread创建线程有创建工作者线程和UI线程之分。

4.OnInitDialog,InitInstance,OnCreate在建立对话框中运行的先后顺序。

答:InitInstance,OnCreate,OnInitDialog.运行顺序从先到后。

5.谈谈C和C++的区别,你是如何理解面向对象思想的?

C和C++最大的区别是他们解决问题的思想是不一样的,C是一个结构化语言,重点在于算法和数据结构,对于C++考虑的是如何构造一个对象模型,使这个模型能配合对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

面向对象是指人们认识客观世界的思维方式,采用基于对象的概念去建立模型

6。Heap与stack的差别。

Heap是堆,stack是栈。

Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。

Stack空间有限,Heap是很大的自由存储区

C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。

程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

7.Windows下的内存是如何管理的?

内存分配方式有三种:

1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

VC技术 第6篇

作为女性投资人,我很庆幸自己生在中国。虽然男女仍有天然的性别差异,我们在现代以脑力劳动为主的工作中,已经很少感觉到因为性别产生的歧视。这都要感谢毛主席,妇女解放得彻底。其他国家的女性vc就没有这么幸运。我的一名同事,在日本是恐龙级的女性投资人,前两年不得不离开我所在的投资机构,被迫的……听说在日本以男性为主的投资圈子里,她很难抢到案子。在美国,这个我们认为最自由平等的地方,女性似乎也很难在投资圈子里独挡一面。

我曾经问过一位美国的基金主管合伙人和一位中国的基金主管合伙人同样的问题:你认为女性在这个行业的就业前景如何?美国的那位显得更悲观,强调了更多的性别因素。而中国的这位则似乎不太在意性别差异。或许,因为中国人更婉转一些也说不定……但我在美国确实没有见到或听到如国内业界那几位一般有影响力的女性投资人。

中国投资界的大姐大颇有几位,其中包括T君和c君。两人都入道早,也都各自有投资的成功案例,而且成立了自己的基金。出于私心,我常希望业界多几位成功的女性投资人,也希望成功的那几位在不断的竞争中能够继续胜出。不幸的是,进入2011年以来,她们两位各有各的烦恼。T君所在的T基金又出走了两位合伙人。此前已经有两位合伙人离开了;至此与T君共同创立T基金的创始团队只剩下她一人。c君投资的公司则纠纷不断,A公司因为夫妻财产官司影响了上市进程,B公司则家族内斗激烈,官司缠身。

这些放在一般资人身上,也许不会这样被人深入细致地挖掘却因为是女性投入而受到性格外的关注,因止而放大。女性投资人的弱点以乎毒暴露无遗。做事过于细节,管理人不够手腕,等等。

确实,做投资人难,做女性投资人更难。不能与企业家称兄道弟,不会与其他投资人一醉方休,如何抢到案子,培养感情,产生影响?女性投资人无法像男性同事们那样无牵无挂地在外奔波。家庭和孩子的则自责任我们总是尽量推掉非“不得不参加的”会议,缩短行程,来减少些心中对孩子的负疚感。更不要说管理一个基金,带领一个团队,让一群ego同样很强的男同胞们心服口服。中国五千多年历史上就出了一个穆桂英吗?

但是,千万不要因此就心灰意冷。女性做投资也是有其优势的。

比如说,女性通常善于聆听与沟通,能与企业家建立更为信任的关系。信任的力量是强大的。企业家更愿意选择他们信任的人投资,和他们信任的人一起奋斗。而且成功的企业家在这方面的判断力是超强的,他们可能信任一个见过一面的人胜于喝过无数次酒的朋友。

女性一般也多一些耐心,更容易成功于执着,心无旁骛。比较少今天游戏项目,明天又改投瘦猪饲养,较少盲目跟风,适于守着专业的一两个行业,做深做细。

VC中使用ADO技术访问数据库 第7篇

Connection,Command,Recordset是ADO对象模型中三个主体对象。可以被独立地创建和释放,而不需要访问更高一层的数据对象。例如:ADO对象允许以打开的方式访问一个Recordset对象而不必首先建立一个与数据源的连接,使得ADO模型比其他对象模型更简单和更灵活。

1.1 引入ADO库文件,初始化COM库

要使用ADO对象访问数据库,必须在工程的stdafx.h文件里用直接引入符号″#import″引入ADO库文件,以使编译器能正确编译。代码如下所示:

该语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数″EOF″改名″ado EOF″。这样不需添加另外的头文件,就可以使用ADO接口了。

应用程序在调用ADO前,必须初始化COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的Init Instance()成员函数里使用Afx Ole Init()来初始化COM库环境。

1.2 使用Connection对象连接数据库

一般通过Connection对象的Open方法来连接数据库,该方法的原型是:

创建ADO的连接,首先要设置ADO连接对象的Connection String属性,该属性提供所要连接的数据库类型、数据所处服务器、要访问的数据库和数据库访问的安全认证信息。Userl D是用户名,Password是登录密码,Options是连接选项,用于指定Connection对象对数据的更新许可权。

常用的连接方式有以下几种:

(1)通过JET数据库引擎对ACCESS 2000数据库的连接:

(2)通过DSN数据源对任何支持ODBC的数据库进行连接:

(3)不通过DSN对SQL SERVER数据库进行连接:

其中Server是SQL服务器的名称,DATABASE是库的名称。下面的一段代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。

1.3 查询、处理数据,取得结果记录集

为了取得结果记录集,需要定义一个指向Recordset对象的指针:_Recordset Ptr m_p Recordset;并为其创建Recordset对象的实例:

查询、处理数据,需要用到SQL命令。SQL命令的执行可以采用下面三种形式。

(1)用Connection对象的Execute方法执行SQL命令。Execute方法的原型如下所示;

(2)利用Command对象来执行SQL命令,也可以利用Command对象执行SQL语句,并取得结果记录集,举例如下:

(3)直接用Recordset对象进行查询取得记录集,和R-ecordset对象提供了丰富的控制功能,如记录锁定,游标控制等。下面的语句为表格查询:

1.4 使用完毕后,关闭连接,释放对象

2 关于数据类型转换

COM对象是跨平台的,使用了一种通用的方法来处理各种类型的数据,因此CString类和COM对象是不兼容的,需要一组API来转换COM对象和C++类型的数据[3]。_vatiant_t和_bstr_t就是这样两种对象。提供了通用的方法转换COM对象和C++类型的数据。实际项目的开发过程中需要存储较大的二进制数据对象BLOB(Binary Large Object),如:图像文件、音频文件或其它二进制数据。其存取的方式与普通数据有所区别。

BLOB数据的保存需要使用Append Chunk函数,Append Chunk包含在Field对象中,原型为:HRESULT Append Chunk(const_variant_t&Data)。从函数原型中可以看到关键的问题是需把二进制数据赋值给VARIANT类型的变量。读取BLOB数据应该使用Get Chunk()函数,其原型为:_variant_t Get Chunk(1ong Length);给出数据的长度后Get Chunk将返回包含数据的VARIANT类型变量,然后可以利用Safe Array Acccss Data函数得到VARIANT变量中指向数据的char b类型的指针,方便用户的处理。

3 结束语

ADO的对象层次模型封装了数据库访问细节,为C++程序员提供了一种非常好的数据访问策略。使程序员从具体的DBMS中解脱出来,从而极大的减少了软件开发的工作量,缩短开发周期,提高了效率和软件的可靠性。

参考文献

[1]刘天印.基于VC++的数据库访问技术的比较与选择[J].黄石:黄石理工学院学报,2005(4).

[2]Lazar D.Microsoft Strategy for Universal Data Access,[S.l.]:Microsoft Corporation,1997.

VC技术 第8篇

在unicode码越来越完善的情况下, 许多操作系统, 所有最新的浏览器和许多其他产品都支持它。Unicode标准的出现和支持它工具的存在, 是近来全球软件技术最重要的发展趋势。不仅可以很容易地在不同语言之间进行数据交换。还可以分配支持所有语言的单个二进制.exe文件或.dll文件, 并能提高应用程序运行效率。例如基于AT指令的中文短信的发送和读写就是个应用unicode码转换的典型实例。

在VC++界面中插入如图所示控件, 两个编辑框分别设置变量m_strChinese和m_strUnicode, 按钮关联函数OnbnclickedButton () , 要使用户在编辑框ID_strChinese中输入一个或多个汉字, 单击按钮后能方便地在另一个编辑框ID_strUnicode中回显出所输入全部汉字的Unicode码, 需要分三步进行:第一, 利用VC++的_bstr_ () 函数将变量m_strChinese中的汉字内容转成Unicode码, 即宽字节WCHAR类型;因为pdu模式只能识别ASCII码, 在ASCII码中, 一个英文字母 (不分大小写) 或数字占一个字节的空间, 故第二步要将每个字元占用2个位元组的WCHAR类型转换到四个字节分别存储;第三步, 将数字转换成char型。此时将转换后的char型代码赋值给变量m_strUnicode, 即可在编辑框ID_strUnicode中显示出汉字的Unicode码。详细代码为:

经实际测试, 该方案很好得实现了基于VC++的汉字转Unicode码, 例如汉字编辑框中随意输入一些汉字后, 在Unicode码编辑框中回显出一串代码, 经校对, 确实是所输入汉字的Unicode码。

需要指出的是该代码是在Visual studio环境中的格式, 若在vc6.0平台下, 需将WcharTo4Hex () 函数中的for (int i=0;i

本文系统地讲述了基于VC++的汉字转Unicode码的设计与实现, 该方案具有很强的使用价值。随着手机的广泛使用, SMS已经广泛地应用于监控定位系统、无线报警、远程维护及数据信息查询等各个领域。GSM模块收发中文短消息所采用的的PDU模式是支持中文信息的普遍应用的协议模式, PDU中的汉字编码即是Unicode。本文从它的原理、实现算法, 数据结构、代码编写方面作了详细的阐述, 实现了一种新的比较方便的转换方法。对中文输入法的发展具有重要的理论价值和现实意义。

参考文献

[1]曲卫华.手机中文拼音输入法的设计与实现[J].太原大学学报, 2008, (9) :1

[2]胡燕飞, 黄俊伟.短消息编解码算法研究及实现[J].通信技术, 2007, (5) :1-3.

VC技术 第9篇

1 VC++ 开发平台及开发语言

Visual C++ 是微软件公司主推的一个功能十分强大的可视化开发工具, 版本不断更新, 目前最新的版本是2012 版本。新版本比以前版本具有更多的类库, 项目开发效率更高。它包含数据库项目、MFC、控制台等多个组成部分, 集有非常丰富的类库, 可供开发人员方便调用。目前, Visual C++ 被集成到VISUAL STUDIO平台中, 大批量的开发组件被应用在该平台中, 有利于开发人员迅速开发实施项目。该平台所应用的组件主要有以TCP/IP协议为基础的SOCKET网络通讯组件等。此外, VC++ 的优势还包括网络版的应用程序等。与其他开发工具相比, 使用该工具运行的系统效率更高。不仅如此, 它还具有其他开发工具所不具备的图像处理优势, 能够实现对硬件的全面控制。

2 软件工程技术

2.1 组件技术

组件技术与软件复用二者之间存在着密切联系。复用以组件为具体表现形式, 而以复用技术为基础逐步建立起来的组件独立性非常强, 一方面能够组建一个组建加工厂, 另一方面还可以实现单独发布, 可谓是一举多得。由于组建的优点非常多, 使得组件被大量应用于系统。将组件应用到系统中, 能够进一步提高组件系统的维护性。从人才管理系统功能需求的角度来看, 将组件应用于系统中能够与系统的实际需求相吻合。

2.2 UML技术

UML是一种建模语言标准或是一种规范, 而这种规范是设计人员在设计项目的过程中必须遵守的。它的产生并不是随机的, 且具有一定必然性。随着科学技术水平的提高, 项目规模以及系统开发的程度也不断提高。在这种大环境下, 参与系统开发的人数也越来越多, 以往开发人员所应用的传统设计方法已经难以满足社会的需求。因此, 有必要建立一种能够让软件设计界所有设计师都能够遵从的标准, 从而实现软件开发设计的有序进行。

2.3 数据网络帧捕捉术

网络接口只有在服务请求与网络接口的地址相匹配的情况下才会发出响应操作。如果地址不相匹配, 网络接口就会拒绝对方发来的服务请求。然而, 众所周知, 网卡是在网络通讯中发送帧的底层设备以及底层数据帧的接受设备。在世界范围内, 网卡中的MAC地址是独一无二、不可取代的。因此, 数据帧就可以使用独一无二的MAC地址迅速找到数据想要达到的目的端。网卡驱动程序的接收模式决定网卡端的数据帧要不要接受。如果网卡的驱动程序决定接收, 则网卡驱动程序就会产生一个数据接受中断信息, 并发出指令。如果不这样做, 到达的数据帧就很有可能被忽略掉。正因如此, 可以得出结论:网卡可以自行决定接受还是不接收数据帧。在决定接不接受数据帧的过程中, 计算机不参与决定。在得到网卡驱动程序所发出的中断信号后, CPU就会中断, 操作系统根据网卡的驱动程序设置的网卡中断程序地址对所接受到的数据信息进行调用。

3 网络技术

3.1 路由技术

为了支持最新的IPv6 技术, 并不需要对于IPv4 路由协议进行太大改变。目前的一些协议已经对IPv6 有了很好的支持, 其中包括单播路由协议、组播协议等。

RIPng:RIP (Routing Information Pritocol) 路由协议是一种采用距离向量算法的距离向量规则。它是对原始的IPv4内容中的RIP-2 协议的延伸, 以获得了下一代RIP, 其中很多概念可以用在新一代协议中。

RIPng的度量是基于跳数 (hops count) 的。每经过一台路由器, 路径的跳数加l。因此, 跳数越多, 路径就越长, 路由算法则会优先选择跳数少的路径。RIPng支持的最大跳数是15, 跳数为16 的网络则被认为不可达。

3.2 隧道技术

隧道技术可以实现IPv4 和IPv6 之间的通信, 从而可在IPv6 还未流行前起到很好的过渡作用。IPv6 数据包封装在IPv4 报文里, 可以使现有的传输 (指主要适用于IPv4 到路由器) 机制应用于IPv4 基础设施, 这就是隧道机制。随着时代的发展, 一些局部IPv6 网络可能是一个执行IPv4 协议的骨干网络, 为了实现通信, 必须使用隧道技术。当你穿过源站点和目标站点的IPv4 数据包的源和目的地址, 隧道出口的IPv4 地址中的IPv6 数据包封装在IPv4 中, 隧道入口和出口的地方是透明的。IPv6 数据包转发到随后的目标站点的透明度隧道的IPv6, 从IPv4 到IPv6 已被广泛应用于隧道技术。然而, 技术不允许实现IPv6 主机通信IPv4 主机和主机到主机的隧道。

配置隧道是最早为IPv6 开发的过渡机制之一, 目前包括MCT (手动隧道) 和GRE (通用路由选择封装隧道) 两种人工建立隧道的方式。

3.3 地址转换 (NAT-PT) 技术

NAT-PT (Network Address Translation-Protocol) 是将IPv4 地址与协议和IPv6 地址与协议相互转换的技术, 其中有静态和动态两种形式。

静态NAT-PT:在静态NAT-PT中, IPv6 地址和IPv4 地址是一一对应的映射关系。如果IPv6 网络中的节点需要访问IPv4 中的一个IPv4 地址, 则需要在NAT-PT设备中进行设置。

静态NAT-PT原理:PCA的地址为1::1, PCB的地址为2::2, 由PCA发送报文到PCB, 当报文抵达router时候, router发现PCB的地址前缀2::, 从而在自身配置中寻找与它匹配的静态映射, 并且对此报文进行转换。报文到达目的地址PCB之后, 其间又可以进行逆转换。

静态NAT-PT特点:原理简单, 能够清楚地看出他们之间的关系, 但是由于两者的地址一一对应, 配置复杂, 维护工作量大, 所需要的IPv4 的地址量也比较大。

4 结语

系统介绍网络开发过程中所用到的软件工程技术理论和几种常见的系统开发方法, 详细介绍了基于VC++ 对UML技术、组件技术、路由技术、隧道技术、地址转换技术等的开发。

摘要:目前的网络中, IPv4的数量占据着绝大多数。如何完成IPv4转换到IPv6, 是网络发展需要面对的一个主要问题。由于目前大部分设备支持IPv4, 要想快速完成转换是不可能的, 因此人们提出许多路由技术方案进行两者之间的过渡。而Visual C++可以对各种网络技术进行完整解析, 所以本项目的网络管理系统部分内容就选用VC++程序设计工具。虽然开发周期和难度会大一些, 但是该工具开发的模块执行效率很高, 适用于网络方面的系统开发。

关键词:Visual C++,网络技术,技术开发

参考文献

[1]谢希仁.计算机机网络 (第五版) [M].北京:工业出版社出版社, 2009.

[2]冯登国.计算机算机通信网络安全[M].北京:清华大学出版社, 2007.

[3]赵喆.计算机网络实用技术[M].北京:中国铁道出版社, 2008.

[4]许家珆.软件工程——方法与实践[M].北京:电子工业出版社, 2007.

VC技术 第10篇

VC6.0开发数据库的技术是多种多样的,包括ODBC API、MFC ODBC、DAO、OLE DB、ADO等。在这些技术中,OLE DB是Microsoft的新数据库接口,它基于组件对象模型COM(Component Object Mode1)。这种接口是Microsoft对其系列数据库API的最新补充之一。它的特点在于对所有数据库文件提供了一个统一的调用接口,它既可以访问关系数据库,又可以访问非关系数据库[1]。

直接使用OLE DB的对象和接口设计数据库应用程序需要书写大量的代码。为了简化设计,VC提供了ATL模板用于设计OLE DB数据应用程序和数据提供程序。利用ATL模板可以很容易地将OLE DB与MFC结合起来,使数据库的参数查询等复杂的编程得到简化。MFC提供的数据库类使OLE DB的编程更具有面向对象的特性。Visual C++提供的用于OLE DB的ATL模板可分为数据提供程序的模板和数据使用程序的模板(客户模板),本文将介绍的是后者。

1 OLE DB的原理

1.1 OLE DB应用程序的结构

从结构上看,使用OLE DB数据库开发接口的应用程序可以分为3类,OLE DB数据提供程序(OLE DB Data Provider)、OLE DB数据应用程序(客户程序,OLE DB Data Consumer)和OLE DB服务提供程序(OLE DB Service Provider)。

OLE DB数据库应用程序的基本结构如图1所示[2]。

当数据使用者需要对数据库进行操作时,数据使用者并非直接对数据源发出指令,而是通过OLE DB接口与数据提供者进行交互。数据提供者从数据源取得所要查询的数据时,由数据使用者将数据从接口取出并使用。在这些操作中,数据使用者和数据提供者都不必知道对方的具体应用,而只需要对接口进行操作,这样简化了程序的设计。

1.2 OLE DB对象的结构

OLE DB是由几种COM对象组成,其中每个对象又包含若干个接口,这些对象和接口的定义是依照COM模型制定的。每一组件必须输出一系列OLE DB接口,OLE DB接口的对象结构如图2所示。

2 使用OLE DB客户模板开发用户程序

2.1 通过AppWizard建立数据库应用程序

使用AppWizard创建一个基于对话框的应用程序OledbCustomer,该程序使用的数据源是保存人员姓名和年龄的Access数据库Students。

2.1.1 加入ATL产生的模板类

为了应用ATL模板类,必须使用ATL Object Wizard,从Insert菜单中选择New ATL Object,在出现的对话框中选择Category中的DataAccess,在Objects中选择Consumer,选择OLE DB数据提供程序类型,根据所访问的数据库的类型从中选出合适的数据提供程序。在程序OledbCustomer中,使用的是Access数据库,所以选择“Microsoft Jet 4.0 OLE DB Provider”项。

2.1.2 使用ATL产生的对象

1) 对对话框的资源进行编辑,其中的每个控件所定义的变量对应着数据库的访问器(CStudentsAccessor)所定义的公有成员变量。

2) 在对话框类中定义一个CStudents类的对象,这样可以在应用中使用CStudents类所提供的操作函数,注意不是CStudentsAccessor对象。

3) 在对话框类的消息函数OnInitDialog()中,调用该对象的Open()函数来打开行集,即在对话框初始化时将数据库打开,并取回所需要的行集,这样在对话框存在的期间就可以使用所查到的消息[3]。

2.2 数据库基本操作

2.2.1 打开数据源对象和会话对象

打开数据源对象时,首先声明一个CDataSource类的对象,然后调用其Open()函数。打开会话对象时,首先声明一个CSession对象,然后调用其Open()函数。其定义分别如下:

HRESULT Open(LPCTSTR szProgID,DBPROPSET*pPropSet);

HRESULT Open(const CDataSource&ds);

2.2.2 打开行集对象

使用CCommand类对象的方法Open()来打开一个由指定的命令产生的行集。

HRESULT Open(DBPROSET*pPropSet=NULL,LONG*pRowsAffected=NULL,bool bBind=true);

2.2.3 遍历记录集

通过行集类CRowset的移动函数可以在行集中随意移动,然后按需要取回各行的数据。

2.2.4 修改记录

修改一条记录的步骤如下:

给用户记录类中的对应变量赋新值。

调用行集函数SetData()更新数据库中的数据。

程序OledbCustomer中修改当前记录的代码如下:

void COledbCustomerDlg::OnButtonModify() //修改记录

{

UpdateData( TRUE );

if(m-nAge<0 || m-nAge>120)

{

MessageBox(″输入的年龄不符合实际″, ″输入错误″,

MB-ICONEXCLAMATION | MB-OK);

return;

}

//更新变量

m-Students.m-id = m-nID;

-tcscpy( m-Students.m-name, m-strName );

m-Students.m-age = m-nAge;

-tcscpy( m-Students.m-department, m-strDepartment);

HRESULT hResult = m-Students.SetData(); //更新数据库

if( FAILED( hResult ) )

MessageBox(″不能更新数据库″, ″数据库错误″, MB-ICONSTOP | MB-OK);

else

MessageBox(″修改成功!″, ″提示″, MB-ICONINFORMATION| MB-OK);

}

编译运行,一个基本的OLE DB数据应用程序OledbCustomer就产生了。运行时结果如图3所示。

3 结束语

Visual C++6.0通过MFC ATL大大简化了我们开发OLE DB数据应用程序的复杂度,使我们免与同一个个COM API打交道,在实现开发的简易性的同时又向我们提供了相当的灵活性。所有代码都上机通过,在开发中可以稍加扩展即可使用[4]。OLE DB能够访问各种关系型和非关系型数据库的能力以及其它方面的优点,使它成为开发数据库程序的一个良好选择。

参考文献

[1]宋斌,陈玉亭.Visual C++6.0教程[M].北京:北京希望电子出版社,1999.87-98.

[2]李博轩.数据库开发指南[M].北京:清华大学出版社,2000.46-64.

[3]郑章,程刚,章勇,等.Visual C++6.0数据库开发技术[M].北京:机械工业出版社,1999.61-70.

涂志云:爱恨VC 第11篇

2010年7月底的一天,尚诺集团董事会,涂志云被下了最后通牒。

“给你两天时间考虑,这个东西我们不要了。你做了好几年也没什么起色,我们股东不想再烧钱了。”

“这个东西”,指的是尚诺集团的“我爱卡”业务。2005年,涂志云成立尚诺,主打信用卡营销和房贷担保服务,希望做成个人信贷领域的当当、携程。2007年,尚诺获得软银主投的1000万美元融资。

然而,三年后,投资人“逼宫”了。涂志云面临两个选择:一,放弃“我爱卡”;二,放弃尚诺,主持“我爱卡”,从此自己去找盈利之道。

“当时就是战略方面的事情没有沟通清楚,所以才会发生信用卡业务剥离的事情。”差不多一年后,涂志云对《创业家》说,“VC都说自己是长期投资人,但VC的‘长期’可能是三年,而我们可能是十年,这是没有沟通清楚的。你早点告诉我‘长期’是三年,我的打法就会不一样。”

涂承认,自己的问题是没把握好公司运曹的节奏,如果当初知道投资者能接受的时间仅是三年,自己会使用更本土化的做法,加快跑马圈地的步伐。

他争辩道,“中国未来会有几万种信用卡,不需要一个信用卡的超市吗?旅游产品需要超市,书要超市,个人金融信贷产品也需要超市。中国已经发了两亿张信用卡,十年内将超过10亿甚至15亿张,超过美国成为世界第一大信用卡超级大国,不需要这样一个垂直门户吗?老百姓不需要服务吗?”

最终,涂选择放弃尚诺,专注于“我爱卡”。通过换股,涂志云获得了“我爱卡”的大部分股权,而他在尚诺集团的股份,由此前的将近30%稀释到不到10%。

过去十年,正是涂志云从一个海归科学家向本土创业者蜕变的过程。

作为“干人计划”的专家,涂志云认为科学家和创业家的特质分别为“精耕细作”和“跑马圈地”,而这是两个不同的本事。“美国最强的是精耕细作,中国几乎是什么都没有,迅速占领市场,以最低成本获得最高效率。科学家需要在某个领域钻研特别深,创业家需要了解特别广的领域,思路是不一样的。要去平衡精耕细作和跑马圈地的关系,还要花大量时间去做人的关系市场的关系,这是一个遍体鳞伤的过程。”

在尚诺之前,涂志云曾经有过一次失败的创业经历。2002年,他从美国回来,创办了国内第一家针对银行的消费信贷管理咨询公司。但是他遇到了与很多海归同样的问题:水土不服。“从美国带来的技术很超前,但是技术在天上,现实在地上。”

2003年,涂志云再次创业,推行信用卡营销业务,之后便是尚诺和“我爱卡”的故事。2007年8月,尚诺完成第二轮1000万美元的融资——由软银中印集团主投,SIG海纳基金和eGarden基金跟投。此前,后两家曾向尚诺提供600万美元的资金。

“懵懵懂懂的感觉,不谨慎,也没有经过什么挑选。有点像结婚,没有结过婚,看着挺美的,就结了。”涂志云这样总结与资本的关系。

“单飞”后,涂志云承受着巨大压力,但仍然很乐观。他相信国内的信用卡业务已经到了快速发展的阶段。“公司进入商业状态是从去年到现在,现在盈亏基本能够做到持平。我爱卡的网上申请量是57万,会员超过200万,这还是在没有做过推广的情况下,可见需求非常旺盛。”

“创业家”涂志云身上的“科学家”特质开始凸显。他觉得,在“跑马圈地”的时代,自己的优势没能发挥出来,“现在到时候了。信用卡发了五年,跑马圈地圈了一遍,可以开始精耕细作了。当然,一边继续圈,一边精耕细作。”

VC技术 第12篇

在轮轨相互作用的有限监测区内(两枕木之间),车轮对轨道产生的作用力高速滑移通过轮重监测区,该高速移动并作用在轨道接触表面的力,在本文中定义该力为扫掠力。利用扫掠力实验台来模拟轮轨接触,并设计传感器对扫掠力信号进行检测。检测信号主要包括三个部分,车轮重量产生的传感器输出稳态值、低频车辆振动及高频称重轨振动所引起的波动分量和外界干扰成份,该信号属于非线性、非平稳信号。采取何种滤波技术对该信号进行实行滤波处理,排除其余噪声信号,获得其输出稳态值,是本文研究的重心所在。

2 经验模式分解算法特点(EMD)

传统的滤波器在频率域中对数字信号进行滤波,这只适合线性平稳信号,对于非线性或非平稳信号建立频率域的滤波技术是很困难的,因为非线性非平稳信号的频率是随时间变化的,应用传统的滤波方法处理非线性非平稳信号可能会使波形产生畸变。

而近年发展起来的Hilbert-Huang变换(HHT)信号处理方法是对以傅立叶变换为基础的线性和稳态谱分析的一个重大突破,也是最新发展起来的非线性、非平稳信号的时频分析方法。该方法的核心是经验模态分解(Empirical Mode Decomposition,EMD),将复杂的时域信号分解成一组本征模函数(Intrinsic Mode Function,IMF)之和[1]。EMD算法本质上是一个有限次的滤波器,分解后的信号具有如下两个特性:(1)极值点(极大值和极小值)数目与过零点数目相等或最多相差一个(以下简称过零点条件);(2)由局部极大值构成的上包络和由局部极小值构成的下包络的平均值为零(以下简称均值条件)。满足上述特征的信号就称为一个IMF。

由于EMD是从信号本身的尺度特征出发对信号进行分解,没有固定的先验基底,是自适应的,因此得到的IMF表现了信号内含有的真实物理过程,依此得到的结果能够准确地反映出系统的物理特性,对稳态信号和非稳态信号都能进行分析。在对非平稳、非线性时间信号进行EMD分解的过程中,EMD可以作为一个非线性滤波器对该信号进行滤波、消噪处理。该方法已被广泛地应用于机械故障诊断、信号降噪、海浪资料分析等领域的研究。

在选择了EMD作为信号处理方法后,选择何种软件开发平台进行数据采集与处理系统的集成设计成为关键问题,使得该系统能实现数据的实时高速采集,且方便对数据进行EMD滤波处理。

3 软件开发平台

数据采集与处理系统要求实现数据的实时高速采集与存储,根据调研,VC++编程语言是目前应用极为广泛、功能强大的可视化开发工具,相对于其他编程语言如VB/Java/Labview而言,虽然可视化程度低,但对底层的操纵能力强,开发的系统界面友好、执行速度快,易维护和升级。因此可利用VC++结合高速数据采集板卡来进行数据的实时采集。但如果纯粹用C++语言进行EMD处理编程,开发涉及矩阵操作较多的程序,不但费时费力、容易出错,而且运行效率也不一定高。

在数据处理软件方面,MATLAB具有强大的科学计算与数据可视化功能,内置丰富的矩阵处理函数,附有多种面向不同领域,如控制、通信、信号处理及科学计算等。但其可视化编程功能并不明显,不能生成可执行文件。

因此,可以利用VC++的可视化编程特点及底层操纵能力强的优势来进行数据采集系统的界面编写和数据采集,并结合MATLAB强大的矩阵操作功能进行数据的EMD处理,可使得数据采集速度更快捷、数据处理更方便、准确。

4 数据处理流程

数据处理所要实现功能为:可选择任意一个已保存的数据文件,对其进行EMD变换,并显示变换后的图形结果。其工作流程如图1所示。

5 VC++6.0与MATLAB7.0混合编程方法

一般而言,VC与MATLAB混合编程有三种方法,MATLAB引擎、COM组件和动态链接库(Dynamic Link Library,DLL)[2]。其中,动态链接库可以在没有MATLAB的计算机上运行,是一个包含代码、数据和资源的程序模块,可以被其他应用程序共享,它是Windows操作系统中一项重要的技术。可以利用MATLAB编译器将m文件转换成C/C++的动态链接库函数,编译后的程序可以在没有安装MATLAB的计算机上运行。且比另外两种方法生成的源代码要简单可行,运行速度更快。因此在研究中选择利用MATLAB编译器将m文件编译成动态链接库后,再在VC环境中调用,进行数据处理。

在MATLAB7.x版本中,编译器版本为4.x。与以前版本相比,MATLAB编译器4.x不再编译所有的m函数,而只产生必要的接口函数,供其他程序调用。而那些未被编译的函数,则被加密后加入组件技术文件(ComponentTechnology File,CTF)。MATLAB编译器也不再提供数学库和图形库,而代之以组件运行环境(MATLAB Component Runtime,MCR)。MCR是一组标准动态链接库,提供运行程序所需的基本环境。要在其他计算机上运行程序,必须安装MCR。

5.1 MATLAB编译器设置及m程序

为了能够使用MATLAB编译器将*.m函数文件编译为动态链接库DLL,必须对MATLAB的环境做出相应的配置。在MATLAB的命令窗口中输入命令mbuildsetup,并根据系统提示选择合适的编译器。MATLAB会自动检测安装在本地计算机上的C++编译器,按照提示选择VC++相应版本即可。该命令只需运行一次,再次使用MATLAB编译器时,不用重复设置。然后新建m文件test1.m,该程序主要作用为绘制出原始数据,并调用emd.m对原始数据进行EMD处理。

5.2 创建动态链接库

创建动态链接库(*.DLL)的方法是使用MATLAB的mcc命令将*.m文件编译为动态链接库(*.DLL)。关于mcc有很多参数可以使用,而且有多种用法,具体的可以参见MATLAB的帮助。

(1)本文中要将一个文件名为test1.m的文件编译成C++语言的动态链接库,命令如下:mcc-W cpplib:libtest1-T link:lib test1.m。运行成功后,将生成libtest1.h、libtest1.lib、libtest1.ctf、libtest1.dll、libtest1.cpp等8个文件。

(2)在test1.m程序当中还包含了emd函数,而emd函数在另外一个emd.m文件中,因此还需将emd.m编译成动态链接库;命令如下:mcc-W cpplib:libemd-T link:lib emd.m,运行成功后将生成libemd.h、libemd.lib、libemd.ctf、libemd.dll、libemd.cpp等8个文件。至此混合编程在Matlab中的操作设置已经完成。

5.3 VC++中的相关设置及编程

在VC++中新建一个基于对话框的数据采集工程程序Ai。在其上添加列表框、按钮等控件,完成利用VC控制数据采集板卡进行数据采集的编程工作。本节重点研究如何利用VC调用动态链接库进行数据的EMD处理。具体方法如下:

(1)将mcc命令下生成的libtest1.h、libtest1.lib、libtest1.ctf、libtest1.dll和libemd.h、libemd.lib、libemd.ctf、libemd.dll、libemd.cpp和mclmcrrt.lib 9个文件拷贝至已编写完成的数据采集程序Ai的工程文件所在目录下,以备VC程序调用。

(2)在Ai工程的对话框界面上新建3个按钮控件,取名为HHT-SlectFile、HHT和HHT-TERMINATE,对应的ID号分别为IDC_OpenFile、IDC_BUTTON_HHT和IDC_BUTTON_TERMINATE;

其中:HHT-SlectFile按钮能够选择进行EMD转换的数据文件;

HHT按钮能够对所指定的数据文件进行EMD处理;

HHT-TERMINATE按钮用于在EMD处理完成之后对库资源能进行释放。

(3)在程序中编辑代码

ⓐ在AiDlg.cpp中包含两个头文件libtest1.h、libemd.h

ⓑ在CAiDlg::OnInitDialog()函数中,实现对MCR以及库函数的初始化;

ⓒ为HHT-SlectFile按钮添加鼠标单击事件响应函数OnOpenFile(),函数实现的功能为在弹出的对话框中选择需要进行HHT变换的文件;

ⓓ为HHT按钮添加鼠标单击事件响应函数OnButtonHht(),实现的功能为调用test1.m经mcc命令转换生成的test1()函数;

ⓔ为HHT-TERMINATE按钮添加鼠标单击事件响应函数OnButtonTerminate(),主要对MCR和库文件的资源进行回收。

(4)修改工程设置。在VC++集成开发环境中,选择Project->Settings,然后选择Link,在General目录下的Object/library modules栏目下添加三个必需的连接库函数libtest1.lib、libemd.lib和mclmcrrt.lib,两两之间用空格隔开,再点击OK保存上述设置。

5.4 程序编译运行及发布

(1)编译和运行工程

编译整个数据采集与处理工程Ai,得到Ai.exe,在集成开发环境中按Ctrl+F5组合键可以运行Ai.exe,至此数据采集与处理软件编写完毕。

(2)程序的发布

无论编译后产生的是可执行文件还是动态链接库,要使它们能够发布到别的没有安装MATLAB的计算机上使用,必须要在目标计算机上安装MCR。

可以利用MATLAB命令buildmcr来创建可以发布给最终用户的MCR安装文件。Buildmcr的功能是创建一个包含MCR所需要的所有文件的zip压缩文件,名称为MCRInstaller.zip;在最终用户的计算机上,首先将该文件解压缩,并把其中可执行文件所在目录加到系统路径上,就可以在没有装MATLAB的计算机上使用编译后的程序了。

一般来说,需要发布的文件有3个:(a)编译得到的可执行文件或者库函数;(b)CTF文件:这是一种归档技术,通过这种方式,可以只将可执行的应用程序或者组件发布给终端用户,而保证源代码不被泄露,实现程序加密功能。(c)MCRInstaller.zip:通过它能够执行在MATLAB中编写的M文件。MCR支持MATLAB语言的所有功能。

5.5 EMD处理实例

现应用该程序对轮扫掠力电压信号输出值进行采集及EMD处理,处理步骤如下:先单击HHT-SlectFile按钮,在弹出的对话框中选择需要进行EMD变换的文件;然后单击HHT按钮对所指定的数据文件进行EMD变换,生成变换后的图像(如图2);最后单击HHT-TERMINATE按钮,对MCR和库文件的资源进行回收。

程序将原始数据在MATLAB中绘制,并对原始数据信号进行EMD变换,图中细点划线为经过EMD变换后的波形;为还原信号的真实性,波形为最后两阶内在模函数和残余相的叠加。

6 结语

本文以复杂、非线性的轮重信号为例,围绕其数据处理方法进行陈述,重点研究了利用VC6.0与MATLAB7.0混合编程方法中的动态链接库技术对数据进行经验模式分解(EMD),实现了数据采集与处理均在同一VC工程文件中完成。程序利用VC++的可视化编程优势来进行数据采集系统的界面编写和数据采集,并结合MATLAB强大的矩阵操作功能进行数据的EMD处理,可使得数据采集速度更快捷、数据处理更方便、准确。

参考文献

[1]黄志辉,杨海军,申文静.轮扫掠力检测实验台中实现高速弹射的方法[J].机械工程师,2008(5):46-48.

[2]熊学军,郭炳火,胡筱敏,等.EMD方法和Hilbert谱分析法的应用与探讨[J].黄渤海海洋,2002,20(2):12-21.

VC技术范文

VC技术范文(精选12篇)VC技术 第1篇OpenGL显示三维图形流程图如图1所示。1 纹理贴图技术纹理贴图技术也叫纹理映射技术, 在三维图形中,...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部