C#调用c++的动态库dll演示例程

简介: <h1>1.首先编写c++动态库</h1> <p></p> <pre name="code" class="cpp">extern "C" __declspec(dllexport)int __stdcall add(int x, int y){ return x + y;}</pre> <p><img src="http://img.blog.csdn.net/201505

1.首先编写c++动态库

extern "C" __declspec(dllexport)
int __stdcall add(int x, int y)
{
	return x + y;
}


extern "C" __declspec(dllexport)

extern "C"使得在C++中使用C编译方式成为可能。在“C++”下定义“C”函数,需要加extern “C”关键词。用extern "C"来指明该函数使用C编译方式。输出的“C”函数可以从“C”代码里调用.
使用微软专用的_declspec (dllexport)  
cpp文件在编译为OBJ文件时要对函数进行重新命名,C语言会把函数name重新命名为_name,而C++会重新命名为_name@@decoration,
extern "C"表示用C语言的格式将函数重命名
要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)


__stdcall 限定修饰符需要添加。不加这个限定符,不能成功调用,不知道为什么??


2.c#调用c++dll库中封装的接口函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;//

public class DLL
{
    [DllImport("DLLCpp.dll", EntryPoint = "add")]

    public extern static int add(int x, int y);//与dll中一致 
}

namespace DLLTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int ret = DLL.add(2, 3);
            Console.WriteLine(ret);
            Console.ReadKey();           
        }
    }
}

using System.Runtime.InteropServices;

一般用到其中的DllImport,它用来调用windows中一些DLL的函数(Windows API),或调用自己用c++写的DLL中的函数

public class DLL
{
    [DllImport("DLLCpp.dll", EntryPoint = "add")]


    public extern static int add(int x, int y);//与dll中一致 
}

注意:c#如果是64位的环境,c++封装动态库的时候,设置为x64。 32位为什么不能调用,还不清楚?

目录
相关文章
|
7月前
|
C#
C# 解决引用dll,出现dll不可以使用等问题
C# 解决引用dll,出现dll不可以使用等问题
|
7月前
|
C++ 数据格式
LabVIEW传递接收C/C++DLL指针
LabVIEW传递接收C/C++DLL指针
196 1
|
3月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
2月前
|
C#
Delphi可不可以制作出像c#那样的dll类库?
在Delphi中,创建DLL项目(如dll.dpr)并定义一个类TMyCls后,在另一个项目(如test.dpr)中可以引入此DLL并直接实例化和调用类的方法。然而,Delphi目前主要支持两种DLL形式:动态链接库(需显式声明exports,仅支持函数调用)和ActiveX DLL(需定义IDL接口)。这两种方式都较为繁琐。相比之下,C# 的DLL类库更为便捷,编写并编译后即可在其他项目中直接使用。
|
3月前
|
Linux API C++
超级好用的C++实用库之动态库加载器
超级好用的C++实用库之动态库加载器
29 0
|
4月前
|
存储 C++
C++ dll 传 string 类 问题
C++ dll 传 string 类 问题
32 0
|
4月前
|
C#
C# WPF 将第三方DLL嵌入 exe
C# WPF 将第三方DLL嵌入 exe
90 0
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
6月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
127 3
|
6月前
|
安全 编译器 API
程序与技术分享:C#调用DLL的几种方法
程序与技术分享:C#调用DLL的几种方法
94 0