使用Visual Studio 2005创建C#项目案例.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用Visual Studio 2005创建C#项目案例

使用Visual Studio 2005创建C#项目案例 2009-08-24 17:50 yoyolion 博客园 我要评论 字号:T | T 这是一篇使用Visual Studio 2005创建C#项目案例,和.NET Framework一样,.NET Compact Framework也提供了平台调用P/Invoke功能以支持托管代码调用驻留于 DLL 中的非托管函数。关于.NET Compact Framework的详细讨论。 AD: 本C#项目案例主要是使用Visual Studio 2005创建C++和C#混合项目的方法,涉及C#智能设备项目和C++智能设备项目。 通过P/Invoke我们可以充分利用已有的非托管资源,使用非托管的系统API函数,以弥补.NET Compact Framework的不完备性。因此我们可以使用C++来编写非托管的DLL函数,然后通过P/Invoke在C#中进行调用。vs2005提供了一个很好的集成环境,我们可以使用一个解决方案同时管理托管的C#项目和非托管的C++项目。下面介绍使用vs2005创建C++和C#混合项目的方法。 1、首先创建一个C#智能设备项目。如智能设备-Pockent PC 2003-设备应用程序,假定解决方案名为“MixedSolution”,项目名为“DeviceApplication1”。 2、添加C++智能设备项目。在解决方案“MixedSolution”中添加一个新的项目,使用C++创建相同平台 如Pockent PC 200 的智能设备Win32或MFC项目,假定项目名为“CppProject”。注意CppProject必须是Win32或MFC的DLL项目,因为我们需要使用P/Invoke功能实现由C#调用C++项目的DLL。在C++项目中编写需要的函数处理后,对要导出的函数需要进行导出定义,该函数将被C#的P/Invoke调用,只有被正确导出的函数才能被P/Invoke识别。这里值得注意的只有使用修饰符extern “C” _declspec dllexport 修饰的函数才能被P/Invoke调用。在该修饰符中_declspec DLLexport 表示输出,即导出函数的定义;extern “C”表示该函数使用C编译方式,可以被C调用,P/Invoke只能调用使用这种方式编译的函数。 我们可以定义如下符号: #define?DLLAPI?extern?C?__declspec dllexport ? 定义了该符号后,可以使用它来修饰要导出的函数,如声明函数MyFunction: DLLAPI?int?MyFunction int,?int ;? 声明了该函数后,在函数的定义部分使用或不使用DLLAPI修饰都是被允许的。 int?MyFunction int,?int ?//声明了函数后,在定义部分可以不加修饰符 int?ret? ?0; //...处理 return?ret; DLLAPI?int?MyFunction int,?int ?//只给出函数定义,必须加上修饰 int?ret? ?0; //...处理 return?ret; 3、? 使用DllImport导入函数定义。在C#项目 “DeviceApplication1”添加一个包装类,使用DllImport导入“CppProject”项目的导出函数。 internal?class?Wrapper [DllImport CppProject.dll ] internal?static?extern?int?MyFunction int?k1,?int?k2 ; 4、? 修改项目配置实现混合编译。前面的过程只是在一个解决方案下建立了C#项目和C++项目,这两个项目物理上没有进行关联,因此我们必须先编译C++项目,生成CppProject.dll,然后拷贝该文件到设备上,再运行C#项目时才能通过P/Invoke调用该文件中的导出函数。如果对C++项目进行了修改,必须重复以上过程,非常地麻烦。利用vs2005的集成管理特点,对项目配置进行一下修改,我们就可以在两个项目建立关联。 首先修改C++项目的输出路径,在项目属性的[配置属性]-[常规]-[输出目录]项下,将输出目录改为“$ SolutionDir \ DeviceApplication1”,即输出到C#项目所在目录。然后生成一下C++项目,这时在C#项目所在目录下会生成“CppProject.dll”文件,将该文件添加到C#项目中,并在属性中修改[复制到输出目录]为“如果较新则复制”。最后在解决方案的项目依赖项中,设置项目“DeviceApplication1”依赖于项目“CppProject”。 通过这样的配置,在启动项目的调试 F

文档评论(0)

st4739288 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档