博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 通过P/Invoke调用C++函数[DLL]
阅读量:6435 次
发布时间:2019-06-23

本文共 1409 字,大约阅读时间需要 4 分钟。

  公共语言运行库 (CLR) 的 interop 功能(称为平台调用 (P/Invoke)),可以使用 P/Invoke 来调用 Windows API 函数。

一、VS 用 C++ 创建动态链接库

  Step 1:创建Win32 Console Application。本例中我们创建一个叫做“Test”的Solution。

  Step 2:将Application Type设定为DLL。在接下来的 Win32 Application Wizard 的 Application Settings 中,将 Application type 从 Console application 改为 DLL:

  Step 3:将方法暴露给DLL接口。现在在这个Solution中,目录和文件结构是这样的:

编辑 Test.cpp 如下:

#include "stdafx.h"    extern "C"  {      _declspec(dllexport) int sum(int a, int b)      {          return a + b;      }  }

  Step 4:编译

 直接编译即可。

二、在C#中通过P/Invoke调用Test.dll中的sum()方法

  P/Invoke很简单。请看下面这段简单的C#代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace CSharpusedll{    class Program    {        [DllImport("Test.dll", CallingConvention = CallingConvention.Cdecl)]        private static extern int sum(int a, int b);        //加属性CallingConvention = CallingConvention.Cdecl,否则发生错误“托管的PInvoke签名与非托管的目标签名不匹配”        static void Main(string[] args)        {            int result = sum(2, 3);            Console.WriteLine("DLL func execute result: {0}", result);            Console.ReadLine();        }    }}
View Code

编译并执行这段C#程序,执行时别忘了把Test.dll拷贝到执行目录(Debug)中。

也可加EntryPoint属性,这样提供一个入口,以便C#里面可以用不同于dll中的函数名Sum。。

[DllImport("Test.dll", EntryPoint = "sum")]private static extern int Sum(int a, int b);

参考:

 

转载于:https://www.cnblogs.com/peterYong/p/6556548.html

你可能感兴趣的文章
sublime插件与使用技巧
查看>>
微信公众平台开发
查看>>
mysql线程状态
查看>>
6.Dockerfile
查看>>
《猜猜看》游戏开发
查看>>
安卓倒计时实例
查看>>
spring+springmvc+mybatis+logback 框架搭建
查看>>
Android 判断手机是否连接网络
查看>>
小米手机最新线刷包 fastboot包,和最新卡刷包!MIUI V4
查看>>
解决资源抢夺问题(买车票)
查看>>
4.6 元组
查看>>
“十年磨一剑”酷客多智慧连锁版小程序重磅来袭
查看>>
同步与异步到底是什么???
查看>>
django更改数据
查看>>
抓取猫眼部分信息
查看>>
rsync+inotify实时同步
查看>>
我的友情链接
查看>>
使用Maven的assembly插件实现自定义打包
查看>>
jsPlugin 解决Table中值相同的列进行rowlSpan合并
查看>>
Raspberry Pi AP功能改进: systemd服务封装以及dnsmasq的使用
查看>>