C#调用C++ DLL的方法
2015-12-09 18:59
375 查看
由于C#直接访问USB设备的能力较弱,而C++在这方面则强大许多。因此,考虑通过C++实现读写USB设备,C#调用该DLL接口的方式。这个过程中,上网查了一些资料,但是自己动手,仍然会出现这样或者那样的问题,因此,记录下大体步骤,以便后续他人或者自己可以参考。
主要步骤如下:
1 C++ dll声明导出函数,代码如下:
/**
* disconnect printer
*
*/
extern "C" __declspec(dllexport) void __stdcall disconnectPrinter();
2 C# 增加调用声明,类似如下:
namespace WindowsFormsApplication_Call_SDK
{
public class SDK_DLL_API
{
[DllImport("80SDK.dll", EntryPoint = "disconnectPrinter")]
public static extern void disconnectPrinter();
}
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
3 如果报DllImport找不到的类似错误,增加using System.Runtime.InteropServices;即可解决该问题。
4 调用测试,代码如下:
private void button1_Click(object sender, EventArgs e)
{
SDK_DLL_API.disconnectPrinter();
}
5 运行测试,如果在64位的机器下编译调试C#程序,报 C#调用dll提示"试图加载格式不正确的程序"的错误,解决方法如下:
点击项目属性,生成 属性页,把目标平台Any CPU 设置为x86即可。
主要步骤如下:
1 C++ dll声明导出函数,代码如下:
/**
* disconnect printer
*
*/
extern "C" __declspec(dllexport) void __stdcall disconnectPrinter();
2 C# 增加调用声明,类似如下:
namespace WindowsFormsApplication_Call_SDK
{
public class SDK_DLL_API
{
[DllImport("80SDK.dll", EntryPoint = "disconnectPrinter")]
public static extern void disconnectPrinter();
}
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
3 如果报DllImport找不到的类似错误,增加using System.Runtime.InteropServices;即可解决该问题。
4 调用测试,代码如下:
private void button1_Click(object sender, EventArgs e)
{
SDK_DLL_API.disconnectPrinter();
}
5 运行测试,如果在64位的机器下编译调试C#程序,报 C#调用dll提示"试图加载格式不正确的程序"的错误,解决方法如下:
点击项目属性,生成 属性页,把目标平台Any CPU 设置为x86即可。
相关文章推荐
- Divide Two Integers
- Divide Two Integers
- Visual C++ Tips: 程序执行路径,一个容易被忽视的问题
- C++ STL中的vector的内存分配与释放
- Conclusion for Accustoming Yourself to C++
- Visual Studio 2015下载使用问题
- SQLite C++获取表信息、获取列名、获取列类型
- 只说说C++内联函数
- 浅谈C++中指针和引用的区别
- C++设计模式之AbstractFactory
- 学习笔记-delete p与delete []p-sizeof()-strtok
- C语言中extern的用法
- 树与二叉树
- c++实现skip list
- C++primer学习:标准库特殊设施:bitset
- c++实现的快速排序算法
- DOMDocument redefined问题
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- 设计模式之适配器模式
- c++ 回调函数封装