C# 调用 C++ DLL(3) 非托管方式:直接调用C++方法(使用范例)

1、首先在vs2010新建项目选择win32应用程序,并设置为DLL,如下图所示

 

2、添加MyDLL.cpp源文件,其中代码:

#include <cv.h>

#include <highgui.h>
extern "C" _ _declspec(dllexport)void Show()  
{  
	IplImage *img = cvLoadImage("E:\\图库\\abc.jpg");
	cvNamedWindow("Image:",1);
	cvShowImage("Image:",img);
	cvWaitKey();
	cvDestroyWindow("Image:");
	cvReleaseImage(&img);
	return ;
}

extern "C"外部声明,表示函数和变量是按照C语言的方式编译和链接的。

__decspec(dllexport)的目的是为了将对应的函数放入到DLL动态库中。

extern "C" _declspec(dllexport)的目的是为了使用DllImport调用非托管C++的DLL文件。因为使用DllImport只能调用由C语言函数做的DLL。

3、设置项目MyDLL->属性->配置属性->公共语言运行时支持->公共语言运行时支持(、\clr),编译,将生成的dll(debug目录下 )。

 

 

4、新建C#控制台应用程序dllConsoleApplication1,添加引用->浏览->选择生成的DLL添加,将上文所生成的DLL拷贝到C#应用程序的bin里面然后应用如下方式进行调用:

 

5、在dllConsoleApplication1项目上新建一个CPPDLL类,编写以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;   //必须添加,不然DllImport报错
namespace dllConsoleApplication1
{
    class CPPDLL
    {
        [DllImport("MyDLL.dll", CharSet =CharSet.Ansi)] //引入dll,并设置字符集
		//[DllImport("MyDLL.dll")] //可以替代上一句代码
        public static extern int Show();
    }
    class Program
    {
        static void Main(string[] args)
        {
            CPPDLL.Show();
            Console.ReadLine();
        }
    }
}

6、运行结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值