开发者社区> 问答> 正文

使用阿里云服务器进行开发的小结

使用阿里云服务器开发总结(2周工作总结)
1、阿里云暂时只提供C#和Java的sdk,所以需要编写C++代码去调用Dll,以前学习过DLL的显式链接和隐式链接使用两种方式,在工作中加强了对DLL的灵活使用,DLL还分为32位和64位,因为DLL导出的函数指针有32位和64位之分。所以要编译32位和64位下不同版本的DLL来供客户来使用。

2、学习了用C#编写COM组件,网上教程不少,几点注意事项,
2.1 所要导出的类必须为公有
2.2 要导出的属性、方法必须使用接口方式,如果没有在接口中声明,即使 该方法为公有,也不能正常导出到COM中,导致外部调用出错。
2.3 要导出的类必须继承于接口,常识。
2.4 大家都知道COM是需要注册的。注册时要加密钥文件.SNK。进入VS2008 命令提示符。用命令:sn –k MyCom.snk 回车。在vs2008的命令行目 录里面就生成snk文件,将文件拷贝到自己工程目录下。
2.5 打开AssemblyInfo.cs 在里面加入[assembly:AssemblyKeyFile("MyCom.snk")]
2.6 修改项目属性 (1)项目属性->应用程序->程序集信息->选中“使程序 集COM可见”。(2)项目属性->生成->选中“为COM互操作注册”。
2.7 生成。如果在Debug下有一个MyCom.tlb,那你就成功了,如果没有生成,可以使用.Net FrameWork 下的RegAsm.exe这个工具来注册一下。

3、在C++中使用COM组件出现了不少问题。
3.1 使用Import将tlb导入到工程中
3.2 alioos_com::IMyOosInterfacePtr m_pAliOss;声明接口类型指针,使 用m_pAliOss.CreateInstance()函数对指针进行初始化,切记在此之前一定调用CoInitialize(NULL);来初始化COM组件,接下来判断 m_pAliOss是否为NULL,如果为空,接下来调用自然会失败。
3.3 正常调用COM组件中的自己编写的函数即可。
4、文件的上传下载,分块上传和分块下载以及获取文件大小函数的问题。
分块下载开始的时候,使用Stream的Read函数将文件数据从Stream读取到自定义数据缓冲区中。
分块上传的流程和思想:
1) Initiate Multipart Upload: 初始化一个Multipart Upload事件        客户端通知OSS要上传一个大文件,OSS返回给客户端一个唯一标识这次Multipart上传事件的Upload ID。
2) Upload Part:上传数据块
3) Complete Multipart Upload:完成一个Multipart Upload事件,在上传完所有的数据块到OSS上之后,我们就可以要求OSS在服务器端将指定的某个Upload ID所属的数据块组合成最终的文件。
在获取文件大小函数上出现了点问题,开始写的GetFileSize的代码没有什么问题,但是在循环调用2次以上的时候,获取文件大小的函数失败了,一直在找原因在哪里,错误可能发生在C++调用COM组件的时候,也可能是COM组件中获取文件大小的函数失败了,后来把COM组件相关函数代码注释只返回一个数值函数调用成功了,问题指出阿里云提供的api有问题,无语啊。开始的时候,根本就没怀疑过阿里的api会出现问题。质疑可能出现问题的原因,分析相关代码搞懂相关内容,然后去验证心里的想法。
文件读写类中的Read函数,使用安全数组m_pAliOss->Read(m_BucketName,m_Key,fileoffset,&psa,nNumberOfBytesToRead);
HRESULT SafeArrayResult = SafeArrayAccessData(psa, (void **)&pbuf);
memcpy(lpBuffer,(void*)pbuf,nNumberOfBytesToRead);
SafeArrayUnaccessData(psa);
在使用安全数组的时候,加强了指针和缓冲区的理解。SafeArrayAccessData这个函数是将缓冲区的指针返回给第二个参数,如果需要考虑安全数组中的数据,还需要使用memcpy函数将pbuf所指向的缓冲区中的数据拷贝到我们自己的缓冲区中。
在项目开发前期,会制定一个函数接口规范,先按照函数接口去实现函数功能,保持接口参数和返回值的统一性,后期有其他项目需求的时候,再对接口进行完善,对函数内部代码进行优化。
自己编写的代码自己要学会做单元测试,测试下功能模块是否实现了指定功能,不要想当然,自己动手测测就知道了。单元测试很重要。
5、在解决问题的过程中要大胆的质疑,认真的分析,在了解清楚每行代码的基础上,不放过可能有问题的代码。
6、以后写代码的时候要多加点错误处理和日志输出,方便以后有问题的时候进行调试排除错误。
7、最后在读取数据的时候还出现了点问题,首先我要读1M的数据,就一定要确认是否读取到了1M的数据,开始时我想当然以为读取到了1M的数据,其实只读取到了5000b左右而已,最后采用的循环读取流中制定长度的数据才解决。
(C++)CComBSTR ->wchar* ->(C#)String,当调用DLL时使用的是不同的语言,那么就涉及到不同语言数据类型之间的转换,这点需要注意下。
8、当文件下载成功以后,为了确保下载到的数据是否正确,将文件下载到本地与源文件进行比对,看看有什么不同的地方。从网络上读取的数据写入本地文件中,居然和源文件内容有差别,猜测如果前面有一个字符错位了,那么后面的字符都会错位导致错误。
在将音频或者视频数据写入文件中,最好使用二进制方式来进行写入。
如果有志同道合的朋友,欢迎一起交流技术,呵呵

展开
收起
gameover 2014-09-25 14:58:09 18231 0
23 条回答
写回答
取消 提交回答
  • Re使用阿里云服务器进行开发的小结
    写的太好了,就是看不懂
    2015-01-23 00:41:24
    赞同 展开评论 打赏
  • 一个程序员,欢迎骚扰!!!
    技术大牛的博客 表示 看不懂
    2014-12-25 14:50:39
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    支持一下
    2014-12-10 13:36:51
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    呵呵写的太好了。soft.tlte.com支持一下
    2014-11-16 16:26:08
    赞同 展开评论 打赏
  • 2014-11-08 17:35:44
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    so professional
    2014-11-04 08:59:20
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    写的很认真,顶一下。
    2014-10-31 13:58:00
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    感谢你们写出的好文章,我是来学习的。
    2014-10-30 16:01:09
    赞同 展开评论 打赏
  • 好习惯,专业极了
    2014-10-29 19:10:01
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    写的太专业,看不懂。好长的篇幅,楼主辛苦了!
    2014-10-29 16:28:35
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    好样的!感谢
    2014-10-28 21:27:47
    赞同 展开评论 打赏
  •    技术大牛们开博客,经常坚持不下去。
    2014-10-28 09:26:21
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    2014-10-27 22:07:55
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结

    2014-10-27 19:53:18
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    哇撒  加油 好啊
    2014-10-26 20:27:38
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    有技术开发出来的东西不一定有人用啊
    2014-10-25 20:24:09
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    不错,不错。。我半夜来支持你
    2014-10-24 04:32:30
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    顶一下
    2014-10-23 20:51:04
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    阿里云提供的不是常见的操作系统么,API跟阿里云有啥关系? 不懂。。。
    2014-10-22 16:52:14
    赞同 展开评论 打赏
  • Re使用阿里云服务器进行开发的小结
    这年头正应了一句,有技在身是多么重要的事啊
    2014-10-20 15:46:19
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS快储存加密技术 立即下载