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位为什么不能调用,还不清楚?

目录
相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
5月前
|
C++
C/C++ DLL 简单实现
C/C++ DLL 简单实现
44 0
|
6月前
|
C# 开发工具 C++
简单C#类转非托管C++
简单C#类转非托管C++
|
6月前
|
设计模式 算法 安全
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
116 0
|
6月前
|
C# C++
[闻缺陷则喜]C#调用C++的类
[闻缺陷则喜]C#调用C++的类
|
1月前
|
Linux 编译器 开发者
C/C++动态库与静态库 的详细解析
C/C++动态库与静态库 的详细解析
74 0
|
1月前
|
开发框架 Java .NET
C#编程语言的优势与C++对比
C#编程语言的优势与C++对比
|
5月前
|
C语言 C++
【c++】c++ 编译链接时提醒 搜索动态库 -lxxxx 时跳过不兼容的libxxx.so
问题描述:这个问题的表现是——在通过g++或者gcc编译链接可执行程序的时候因为代码使用需要,需要添加对应 的三方库,这个时候在编译指令中 需要添加 动态库添加指令 告诉 ld 链接 对应名称的动态库、或者静态库。
228 0
【c++】c++ 编译链接时提醒 搜索动态库 -lxxxx 时跳过不兼容的libxxx.so
|
2月前
|
C++ 计算机视觉 Python
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
38 0
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
|
6月前
|
IDE 开发工具 C++
[记录][问题]Win32调用C++/WinRT DLL
[记录][问题]Win32调用C++/WinRT DLL