在C#工程中调用C++的DLL
2012-02-22 14:15
323 查看
原来的工程是用C++语言编写的。如果需要在C#工程中调用c++完成的功能模块,一个简单的做法就是将原有C++模块封装为动态链接库(DLL), 而在c#中直接导入已有的DLL 接口。具体的做法如下:
(1) 将原来C++模块封装为DLL
a. 创建和使用动态链接库
(2) 在C#工程中声明导入的DLL中函数接口
一个简单的实例如下:
假设已有C++ 函数
public static extern int tutorial (int* z, int* x, int * y ); // C++函数声明
为了在C# 中调用tutorial函数,需要在相应的CS文件中导入相关的函数声明:
using System.Runtime.InteropServices;
[DllImport("Demo.dll", //动态链接库的名称
EntryPoint = "tutorial", //函数入口点,即函数名
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] //使用的字符集和其他
public static extern int tutorial (ref int z, ref int x, ref int y ); // 函数原型声明
需要注意的问题:
(1) DLL应放在C#工程可以搜索到的路径下,即 a. 与C#工程可执行文件放在同一个目录下(path中设定了当前路径) b. 系统 path已列举的目录下. c. 工程引用的目录下。
(2) 如果DLL中引用了其他的库,而这些库并不是在任何一台机器上都找得到的情况下,C#在调用DLL 函数时会出现找不到当前DLL的错误,此时可能是因为当前DLL所依赖的库函没有找到。此时,可以用 Dependency Walker 查看DLL库依赖情况,发现真正问题所在。当你发现你的代码在某些机器上可以正常运行,但是移植到其他机器上出现问题的时候,你需要留意这点:)
(1) 将原来C++模块封装为DLL
a. 创建和使用动态链接库
(2) 在C#工程中声明导入的DLL中函数接口
一个简单的实例如下:
假设已有C++ 函数
public static extern int tutorial (int* z, int* x, int * y ); // C++函数声明
为了在C# 中调用tutorial函数,需要在相应的CS文件中导入相关的函数声明:
using System.Runtime.InteropServices;
[DllImport("Demo.dll", //动态链接库的名称
EntryPoint = "tutorial", //函数入口点,即函数名
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] //使用的字符集和其他
public static extern int tutorial (ref int z, ref int x, ref int y ); // 函数原型声明
需要注意的问题:
(1) DLL应放在C#工程可以搜索到的路径下,即 a. 与C#工程可执行文件放在同一个目录下(path中设定了当前路径) b. 系统 path已列举的目录下. c. 工程引用的目录下。
(2) 如果DLL中引用了其他的库,而这些库并不是在任何一台机器上都找得到的情况下,C#在调用DLL 函数时会出现找不到当前DLL的错误,此时可能是因为当前DLL所依赖的库函没有找到。此时,可以用 Dependency Walker 查看DLL库依赖情况,发现真正问题所在。当你发现你的代码在某些机器上可以正常运行,但是移植到其他机器上出现问题的时候,你需要留意这点:)
相关文章推荐
- C++工程代码打包的dll在C#工程上使用注意点!变量对应关系与dll调用出错情况。
- C++工程调用c#的dll
- C++ 调用C#工程的 dll , 互相调用方法
- C# 调用C++工程生成的DLL
- c# 调用c++dll挂钩其他程序线程或者进程
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
- C#调用C++的DLL入门篇
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C# 如何调用 C++ 的 DLL
- C# 调用C++ DLL (二)
- C#调用C(C++)dll示例教程,包含dll找不到函数入口的解决办法,包含C#dll调用方式不对出错的解决办法
- 综合项目之闪讯破解(五)之 如何用C#调用C++编写的Dll
- 【转载】C#调用C++ DLL
- c#调用c++编写的DLL
- C#调用C++Dll
- 用VS2008生成C++代码的dll及在C#中的调用及常见的类型转换
- C#调用C++Dll封装时遇到的一系列问题 参考
- C# 调用C++编译成的DLL
- C#项目中调用C++生成的Dll 入门教程
- C#调用C++的DLL 所有数据类型转换方式