C#-调用C++接口

ops/2025/1/1 8:04:29/

一.静态&动态装载DLL

     C++中接口通过编译为DLL对外提供调用,C#需要将DLL加载至本应用才可实现C++接口调用.

     1.静态装载

        C#应用程序在编译为可执行exe时将外部DLL装载至本应用中,例如在CSC编译指令中添加相关参数可实现DLL引用.

        csc /reference:user32.dll /out:HelloWorld.exe

     2.动态装载

        C#应用程序在运行时通过调用kernel32.dll中LoadLibrary完成外部DLL的装载.

二.编译C++DLL

     实现C++方法MYFunction,将接口编译为MyClass.dll

// MyClass.h
#ifdef BUILD_DLL
#define MY export __declspec(dllexport)
#else
#define MY export __declspec(dllimport)
#endifclass MY MyClass {
public:void MYFunction();
};// MyClass.cpp
#include "MyClass.h"void MyClass::MYFunction() {// Implementation
}

三.使用DllImport映射LoadLibrary接口

	public static class Kernel32{[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]public static extern IntPtr LoadLibrary(string lpFileName);}

四.使用DllImport映射MYFunction接口

	static class Tools{[DllImport("MyClass.dll", SetLastError = true)]internal static extern void MYFunction();}

五.C#调用DLL中接口

    public static void Main(){Kernel32.LoadLibrary("myclass.dll");Tool.MYFunction();}


http://www.ppmy.cn/ops/145942.html

相关文章

简单园区网拓扑实验

1.实验拓扑 2.实验要求 1、按照图示的VLAN及IP地址需求,完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan 4、上层通过静态路由协议完成数据通信过程 5、AR1为企业出口路由器 6、要求全网可…

2025最新版Java面试八股文大全

一、Java并发面试题 1、 ThreadLocal 1.1 谈谈你对ThreadLocal的理解? ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。它不是针对程序的全局变量,只是针对当前线程的全局…

MySQL中Performance Schema库的详解(上)

使用Performance Schema 将通过一些示例来演示如何使用Performance Schema解决常见的故障案例。 检查SQL语句 要启用语句检测,需要启用statement类型的插桩,如表1所述 ​ 表1:statement类型的插桩及其描述 插装类描述statement/spSQL语句…

渗透测试中常见的端口

端口合计详情 21 ftp22 SSH23 Telnet80 web80-89 web161 SNMP389 LDAP443 SSL心脏滴血以及一些web漏洞测试445 SMB512,513,514 Rexec873 Rsync未授权1025,111 NFS1433 MSSQL1521 Oracle:(iSqlPlus Port:5560,7778)2082/2083 cpanel主机管理系统登陆 (国外用较多&am…

Druid连接池管理连接池中的空闲连接驱逐流程

Druid连接池中的驱逐空闲线程流程主要涉及以下几个步骤: 1. 创建和启动驱逐线程 createAndStartDestroyThread 方法:此方法负责创建和启动负责驱逐空闲连接的线程。如果提供了 destroyScheduler(一个调度器),则使用该…

info There appears to be trouble with your network connection. Retrying

这个错误信息表明你在使用包管理器安装项目依赖时遇到了网络连接问题。 可能的解决方法: 检查当前node.js版本是否过低。 建议使用当前长期支持版本 yarn的淘宝镜像:yarn的淘宝镜像-CSDN博客 nvm常用命令:NVM常用命令-CSDN博客 下载 | Node.js 中文…

如何在网页端使用 IDE 高效地阅读 GitHub 源码?

如何在网页端使用 IDE 高效地阅读 GitHub 源码? 前言什么是 GitHub1s?使用 GitHub1s 阅读 browser-use 项目源码步骤 1: 打开 GitHub 项目页面步骤 2: 修改 URL 使用 GitHub1s步骤 3: 浏览文件结构步骤 4: 使用代码高亮和智能补全功能步骤 5: 快速跳转和…

修改el-select下拉框高度;更新:支持动态修改

文章目录 效果动态修改:效果代码固定高度版本动态修改高度版本(2024-12-25 更新: 支持动态修改下拉框高度) 效果 动态修改:效果 代码 固定高度版本 注意点: popper-class 尽量独一无二,防止影…