当前位置:  编程技术>.net/c#/asp.net

C# 调用C++写的dll的实现方法

    来源: 互联网  发布时间:2014-10-23

    本文导语:    dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式 extern"C"__declspec(dllexport) 后面加方法即可。 例如如下代码: C++dll代码: 代码如下:e...

  dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式 extern"C"__declspec(dllexport) 后面加方法即可。 例如如下代码:

C++dll代码:

代码如下:

extern"C"__declspec(dllexport) char* ShowImages(BYTE img[],int w,int h){;}

  C#调用dll基本也是固定格式,如下样式,这边有添加unsafe这是因为有用到指针的缘故[没用指针不需要unsafe],C#用指针必须添加

unsafe,并且在项目属性里面的生成允许不安全代码打钩才行.

  还有一点是C#调用DLL需要添加命名空间

代码如下:

using System.Runtime.InteropServices;

  代码样式如下:

C#调用代码:

代码如下:

[DllImport("dll名字.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
unsafe public static extern byte* ShowImages(byte[] src, int w, int h);

  按照如上编写dll以及调用失败原因多数可能就是C++的C#的数据类型没有对应的原因。

  最后还有一点要提的是,具有指针返回值的方法,该指针变量在C++中必须是全局的,方法体里的私有的会出错。原因是出了方法体就被释放了,虽然是return出来的,也没有效果。
  这个问题我之前就遇到过, C++里面return出来一个指针地址,然后C#里面调用,出来的数据乱七八糟,当时一直很郁闷,后来终于发现原因就是指针return出来还是会被释放掉,所以获得的数据乱七八糟。解决方法当然是把指针变量设成全局变量。


    
 
 

您可能感兴趣的文章:

  • C#调用CMD命令实例
  • C# 中调用 MySQL 存储过程的示例代码
  • c# 调用Surfer软件,添加引用的具体操作方法
  • C#调用SQL语句时乘号的用法
  • C# 调用 MySQL 存储过程的代码
  • C#中事件的动态调用实现方法
  • C++调用C#的DLL实现方法
  • C# 登录窗体与窗体调用
  • c# 调用批处理(bat)的实现代码
  • c#和javascript函数相互调用示例分享
  • C#同步和异步调用方法实例
  • C# Winform 调用系统接口操作 INI 配置文件的代码
  • c#中js调用后台的方法介绍
  • c#调用qq邮箱smtp发送邮件(修正版)
  • c#调用qq邮箱smtp发送邮件(修改版)
  • C# Winform调用WEB Service API的示例代码
  • c#调用vc写的ocx控件示例
  • C#线程间不能调用剪切板的解决方法
  • 解析C#中委托的同步调用与异步调用(实例详解)
  • c#通过进程调用cmd判断登录用户权限代码分享
  • 在Python中使用SWIG调用C和C++程序
  • 怎么样在C++里调用Fortran函数??????
  • 如何编写和调用c++类
  • c与c++调用有何区别?请大家帮忙给看看
  • $$++ 怎样用c++调用web services !!!!!
  • C++远程方法调用框架 RMI for C++
  • C++系统调用库 CSCall++
  • Unix环境下,c++如何调用java写的webservice?
  • php调用c++的方法
  • 如何在C程序中调用C++中的函数
  • C++是否可以直接调用所有的system call?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • 用shell调用api接口能实现吗?100分就是你的了
  • JSP调用EJB如何实现耦合度最底
  • strace程序截获进程的系统调用实现方法是什么?
  • 整型数据做函数的参数,怎样实现传地址,和调用程序共用一个地址?
  • 如何实现exec系列的循环调用???
  • 请教gcc编程 问题 关于调用中断 实现 图形模式
  • 如何实现linux下ant调用sh(带输入参数),参数自动填入并执行sh
  • 在java中调用系统FTP命令,实现文件传输???
  • 不理解exec家族的调用是如何实现的。。。求解
  • 请问application (or applet)如何实现对applet 小程序的调用??
  • Linux fork函数的系统调用实现过程是什么呢?
  • destoon调用企业会员公司形象图片的实现方法
  • 请问JSP里面怎样实现上传WORD和EXCEL文件,上传之后如何在IE里面调用显示!!!
  • 内核源文件/net/socket.c中调用其他模块的函数,该如何实现
  • 想在linux下用C实现gzip压缩与解压缩,有没有相关库函数可以调用?
  • java中调用GDAL DLL的实现方法
  • Unix下System函数实现中为何要使用shell去调用执行程序?
  • python调用短信猫控件实现发短信功能实例
  • UNIX环境下,如何实现dup2函数,不允许调用fcntl?
  • Linux添加系统调用时如何调用C语言库函数
  • sessionbean调用entitybean的时候还需要像Client一样远程调用对象吗??
  • system()调用 与 ioctl()调用
  • linux中为什么系统调用比普通函数调用更费时间?
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • 可不可以用java调用其他语言的编译结果?(好象asp调用com那样)
  • 为什么我的BEAN 在WIN2000中调用没有问题,但在LINUX中调用有问题
  • 为什么守护进程调用调用getlogin会失败呢?
  • 关于jsp调用javabean的问题!调用是成功了,但是有小问题!
  • ioctl中能不能调用generic_file_read呀?我一调用就不动了
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3