C++方法封装成dll及C#调用示例

1,编译生成dll时可能出现错误,解决办法:pch.h文件头部,添加声明
#define _CRT_SECURE_NO_WARNINGS

2, c++头文件声明
extern "C" __declspec(dllexport)  char* getvalue(const char * param1, const char * param2);

3, c++方法实现
 char* getvalue(const char * param1, const char * param2) {
     //process,省略
    //return
    std::string value = "result";
    char* cStr = new char[value.length() + 1]; // 加1是为了存储结束的空字符
    strcpy(cStr, value.c_str());
    return cStr;

}

4, c#端

 [DllImport("test.dll", EntryPoint = "getvalue", CallingConvention = CallingConvention.Cdecl)]
 static extern IntPtr getvalue([MarshalAs(UnmanagedType.LPStr)] string param1, [MarshalAs(UnmanagedType.LPStr)] string param2);

 
//调用
try
{
    string param1 = "param1";
    string param2 = "param2";
    IntPtr retPtr = getvalue(param1, param2);
    if (retPtr != IntPtr.Zero)
    {
        try
        {
            // 将指针转换为托管字符串
            string result = Marshal.PtrToStringAnsi(retPtr);                        
            Console.WriteLine("getvalue result: " + result);
            Console.WriteLine();
        }
        finally
        {
            // 释放C++分配的内存
            //Marshal.FreeCoTaskMem(retPtr);
        }
    }
}
finally
{
    // 清理分配的内存
    //Marshal.FreeHGlobal(ptr);
    //Marshal.FreeHGlobal(ptr2);
}

5,参考文档
(1),C++封装成DLL并调用
https://blog.csdn.net/kenjianqi1647/article/details/102833477
https://blog.csdn.net/weixin_44244190/article/details/123504926
(2),VS中用C#调试DLL
https://www.cnblogs.com/lzhu/p/9268280.html
 
(3),生成32位dll注意事项 
 取消使用预编译头
属性-》配置属性-》C/C++ -》预编译头-》预编译头-》
参考资料
https://blog.csdn.net/qq_34059233/article/details/113837245

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PasteSpider】的集群组件【PasteCluster】(让你的项目快速支持集群模式)的思路及实现(含源码)

PasteSpider是什么? 一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩,Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库&…

vue在hash路由模式下实现点击定位滑动

背景:一般是使用锚点来实现dom的定位,但在hash模式下,这种方式不行,会刷新路由,没法实现dom定位的效果。 其实scrollIntoView就可以解决这个问题,scrollIntoView可以将调用它的元素滚动到浏览器窗口的可见…

物联网网关和飞鸟物联平台如何助力其实现智能化升级,提升生产效率-天拓四方

随着工业4.0时代的到来,物联网技术逐渐成为推动工业转型升级的关键力量。物联网网关作为连接工业设备与网络的核心枢纽,在工业自动化、数据收集与分析等方面发挥着越来越重要的作用。本案例将围绕一家知名制造企业,展示物联网网关和飞鸟物联平…

vue中v-bind控制class和style

当使用v-bind指令控制class和style时,可以通过动态绑定的方式根据不同的条件来添加或移除class,以及改变元素的样式。 1. 控制class 通过v-bind:class可以动态绑定class属性。可以使用对象语法、数组语法或者计算属性来实现。 对象语法:使用…

关于ImportError: attempted relative import with no known parent package解决

问题 我的项目结构如下: my_project/ ├── utils/ │ ├── __init__.py │ └── config.py └── scripts/├── __init__.py└── train.py当我在train.py中 尝试导入config中的模块时,即 from ..utils.config import *,报错…

提升消费者满意度的五星售后服务认证

在当今竞争激烈的市场环境中,消费者满意度是企业取得成功的重要因素。五星售后服务认证作为一种权威性认证,可以显著提高消费者满意度,增强企业的竞争力。本文将从四个方面探讨五星售后服务认证如何提高消费者满意度。 五星售后服务认证是由国…

SpringCash

文章目录 简介引入依赖application.yml配置常用注解使用1. 启动类添加注解使用方法上添加注解 简介 Spring Cache是一个框架,实现了基于注解的缓存功能底层可以使用EHCache、Caffeine、Redis实现缓存。 注解一般放在Controller的方法上,CachePut 注解一…

高精度定位技术的必要性与实际应用

在当今社会,随着科技的飞速发展,高精度精准定位技术已成为一项不可或缺的基础技术,其应用范围涉及军事、航空、智能交通、无人驾驶、智慧城市建设等众多领域。高精度精准定位不仅为人们的日常生活带来极大便利,还对提升国家的科技…

鸿蒙轻内核A核源码分析系列六 MMU协处理器(1)

在前面系列分析虚实映射时,涉及到了一些MMU协处理器与相关的汇编代码没有深入讲解。本文来专门分析那些协处理器与汇编代码。 本文中所涉及的源码,以OpenHarmony LiteOS-A内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_l…

mysql性能优化知识点

MySQL性能优化是一个多方面的议题,涉及数据库设计、查询优化、服务器配置、索引管理等多个层面。 以下是一些关键的优化策略: 1、优化简介 使用SHOW STATUS语句查询一些MySQL数据库性能参数,格式如下: SHOW STATUS LIKE value;…

Presidents of America(1789-1860)

Presidents of America preface 美国总统,是美利坚合众国的国家元首、政府首脑与三军统帅,是当今世界权力最高的人。美国总统是根据1787年通过的美国宪法而设立,行使宪法赋予的行政权。截至目前,美国一共有过44位总统(45任&…

项目中的增删改查

1.增加: 接口定义:在Spring Boot的Controller(控制层)定义添加医院的接口,使用POST方法,并接收医院信息的JSON数据。数据校验:在接收到数据后,进行必要的数据校验,确保数…

运行mvn命令打包项目jar包报错?“Fatal error compiling: 无效的目标发行版: 19 ”, 让我来看看~

最近写实验,要打包项目,但是不管是在cmd运行“mvn clean package -Dmaven.test.skiptrue”命令,还是在idea上去操作,都出现了这样的一个错误: [EROR] Failed to exeoute goal org.apache.maven.plugins:maven-comnpile…

CCRC信息安全服务资质认证是什么

什么是CCRC认证? CCRC 全称 China Cybersecurity Review Technology and Certification Center。CCRC认证是指中国网络安全审查技术与认证中心进行的信息安全服务资质认证。简称信息安全服务资质认证。 CCRC,即中国网络安全审查技术与认证中心&#xff0…

倾斜摄影优化之重:轻量化

老子云倾斜摄影轻量化 1、支持全网多端流畅展示 2、支持私有化部署 3、一键轻量化G级模型 4、多种精度选择 5、支持二次开发 (1)、压缩可达98%以上 (2)、多种精度任选:普清、标清、高清、超清 (3&am…

Illustrator 2024 mac/win版:创新设计,一触即发

Illustrator 2024是一款由Adobe公司开发的强大且全面的矢量图形设计软件,它以其卓越的性能和丰富的功能,为设计师们提供了一个高效、直观且富有创意的工作环境。 Illustrator 2024 mac/win版获取 作为一款矢量图形设计软件,Illustrator 2024…

linux shell查看24h内修改的文件

执行命令: find /path -type f -mtime 0

【电机】开环控制系统和闭环控制系统

1 什么是控制系统 控制系统是指由控制主体、控制客体和控制媒体组成的具有自身目标和功能的管理系统。也可以理解为:为了使控制对象达到预期的稳定状态。例如一个水箱的温度控制,可以通过控制加热设备输出的功率进而来改变水温达到目标温度,…

基于WPF技术的换热站智能监控系统09--封装水泵对象

1、添加用户控件 2、编写水泵UI 控件中用到了Viewbox控件,Viewbox控件是WPF中一个简单的缩放工具,它可以帮助你放大或缩小单个元素,同时保持其宽高比。通过样式和属性设置,你可以创建出既美观又功能丰富的用户界面。在实际开发中…

Ansible——yum模块

目录 参数总结 1. 安装软件包 安装单个软件包 安装多个软件包 从特定仓库安装 安装包并禁用 GPG 检查 简单的命令行帮助 2. 更新软件包 更新单个软件包到最新版本 更新所有可升级的软件包 3. 删除软件包 删除单个软件包 删除多个软件包 4. 安装特定版本的软件包…