C#调用非托管C++DLL中的函数
来源:互联网 发布:吉视传媒网络宽带连接 编辑:程序博客网 时间:2024/05/17 00:51
http://www.debugease.com/csharp/550953.html
最近一个项目需要用C#调用非托管C++DLL中的函数接口(有生成的DLL文件和Lib文件),C++的函数接口的参数中使用了Vector<CPoint>及Vector<m_Struct>结构(m_Struct表示自定义的结构体),参考了网上的一些资料:
1、如果直接使用C#调用(http://blog.csdn.net/pansiom/archive/2006/01/01/568096.aspx)的话,没办法解决Vector的问题;有没有可行性?由于只是调用其中一个核心接口函数,如果可行的话,会省很多事,给出可行的代码。2、是不是只能使用C++/CLI来对非托管DLL进行包装再调用,这个应该肯定能够实现,因为没有接触过C++/CLR,请教具体的实现流程!(由于只需要封装一个接口函数,工作量应该不大)已有Function.dll和Function.lib两个文件,m_Struct结构体的声明也知道。
具体函数形式如下:
bool Fun(vector<CPoint> &list, bool &flag, int &type, vector<m_Struct> &struct);
输入参数:list,flag
输出参数:list,type,struct
解决方案 »
- C#调用非托管C++DLL中的函数
- 使用C#调用非托管DLL函数
- C#调用非托管DLL函数
- C#调用非托管DLL函数
- C#调用非托管DLL
- C#调用非托管DLL
- C#调用非托管Dll
- C#调用非托管DLL
- C#调用非托管DLL
- C#调用非托管DLL
- C#调用非托管dll
- C#调用非托管DLL
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- 如何使用C#调用非托管DLL函数
- C#调用非托管DLL函数bitblt实现截屏
- 平台调用:C# 使用非托管dll函数
- SQL_Server_2005_日期和时间函数(描述及实例) (转)
- Visual Studio 无法输入中文
- C++ 操作sqlite3数据库
- 动态分配和释放二维数组
- hdu-1013-Digital Roots
- C#调用非托管C++DLL中的函数
- nginx location常用语法
- UIApplication sharedApplication详细解释-IOS
- jquery 查询元素技巧
- Google中国2014校园招聘笔试Round A China New Grad Test Problem B. Rational Number Tree
- dwr框架报SecurityException异常的一个可能原因:类加载问题
- 数据结构与算法B代码编写作业,字符串插入,解题报告&AC代码
- poj 1244 Slots of Fun
- Android开发中设置无标题
[DllImport("xx.dll", EntryPoint="c++中方法名")]
public static extern void 转化后的C#方法名(bool b, int i);比如在C++类库中有个方法:void CFunction(bool b, int i);
你在C#中调用时,先创建一个类
class CSClass
{
[DllImport("xx.dll", EntryPoint="CFunction")]
public static extern void CSFunction(bool b, int i);
}使用的时候就:CSClass.CSFunction(true, 1);//方法名可以相同,不一定要改
就是用C++把这个函数再次封装一次,把他封装成C#可以很方便调用的定义格式。
public static extern void 转化后的C#方法名(bool b, int i);比如在C++类库中有个方法:void CFunction(bool b, int i);
你在C#中调用时,先创建一个类
class CSClass
{
[DllImport("xx.dll", EntryPoint="CFunction")]
public static extern void CSFunction(bool b, int i);
}使用的时候就:CSClass.CSFunction(true, 1);//方法名可以相同,不一定要改”这种基本数据结构(你给的例子只涉及bool和int数据)我知道,关键是传递的参数中含有Vector以及自定义Struct类型数据时如何来做?
就是用C++把这个函数再次封装一次,把他封装成C#可以很方便调用的定义格式。”你所指的应该还是利用C++/CLI来做吧~能否给出代码呢?
首先分享下经验
1,文件头一定要有using System.Runtime.InteropServices;
2,不要使用添加引用的方式,使用DllImport方式加载
3,确保dll和应用程序都在同一个目录,且加载名称正确
4,确保接口函数的参数转换正确,你最好贴出C语言的dll接口,或者使用工具查看下dll接口如果以上你确保正确的话,我可以确保你应该是可以正常调用的。
[DllImport(".dll")]
public static extern bool Fun(ref <CPoint> list, ref bool flag, out int type, out list<m_Struct> struct);