C#调用C/C++DLL的两种方法

前言

工作中,需要给客户提供公司产品的.NET动态库,但驱动工程师往往只提供C编译的库,这里就需要我做一些中间工作,方便客户使用我们的产品。

方法1:常用的DLLImport方法

一般这种方法用于调用非托管动态库,很常见,这里我就不做赘述,推荐一个好用的网站方便大家做参考, 链接: pinvoke.net

方法2:CLR封装法

通过Visual studio新建一个支持CLR的DLL项目,项目调用原来c编译的库的Lib文件,然后重新封装一层方法写在这个项目里面。
下面举例创建一个CLRCom项目,关键代码如下:
引用Lib的头文件.h,这里是gxcom_lib.h

#pragma comment(lib, "gxcom.lib")

#ifndef DLL
#define DLL __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" {
#endif
//这是原来c编译dll中的方法,调用声明,例如
DLL DWORD __stdcall GetSN(HANDLE hCom);

CLRCOM.h

#pragma once
using namespace System;

namespace clrCOM
{
	public ref class CLRCOM
	{
	public:
		CLRCOM();
		~CLRCOM();

		DWORD CLR_GetSN(IntPtr ptr);//自定义方法
	};
}

CLRCOM.cpp

#include "gxcom_lib.h"
#include "CLRCOM.h"
namespace clrCOM
{
	CLRCOM::CLRCOM()
	{
	}
	CLRCOM::~CLRCOM()
	{
	}
	DWORD CLRCOM::CLR_GetSN(IntPtr ptr)//封装实现
	{
		HANDLE hDev=(IntPtr)ptr;
		return GetSN(hDev);//调用了原方法
	}
}

注意,.NET项目可以直接引用此项目生成的DLL(我这里是clrCOM.dll),但也要将原来C编译的DLL(我这里是gxcom.dll)拷过去,因为它是依赖文件,不然会报错“System.IO.FileNotFoundException”。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值