首页 > 编程语言 >c#学习笔记

c#学习笔记

时间:2023-07-21 10:22:16浏览次数:25  
标签:--- Console Person c# void 笔记 学习 int 10

PInvoke互操作技术

  • c++编写
--- Person.cpp

extern "C"
{
    _declspec(dllexport) int Sum(int a, int b);
}


--- Person.h

#include "Person.h"
#include "iostream"
using namespace std;

int Sum(int a, int b)
{
    return a + b;
}
  • c#调用
    class Program
    {
        [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl)]
        extern static int Sum(int a, int b);

        static void Main(string[] args)
        {
            var result = Sum(10, 20);

            Console.WriteLine($"10+20={result}");

            Console.ReadLine();
        }
    }

---- output -----

10+20=30
  • c#编写,c++调用
 --- main.cs
    class Program
    {
        delegate void Callback(int a);

        [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl)]
        extern static void AsyncProcess(Callback callback);

        static void Main(string[] args)
        {
            AsyncProcess((i) =>
            {
                //这里回调函数哦...

                Console.WriteLine($"这是回调函数哦: {i}");
            });

            Console.ReadLine();
        }
    }

------- output -------  

这是回调函数哦: 10


--- Person.cpp

extern "C"
{
    //函数指针
    typedef void(_stdcall* PCALLBACK) (int result);
    _declspec(dllexport) void AsyncProcess(PCALLBACK ptr);
}

--- Person.h

#include "Person.h"
#include "iostream"
using namespace std;

void AsyncProcess(PCALLBACK ptr)
{
    ptr(10);  //回调C#的委托
}

环境配置

  • 用vs2019创建C++的Console App,修改两个配置: 将程序导出为dll,修改成compile方式为Compile as C++ Code (/TP)

标签:---,Console,Person,c#,void,笔记,学习,int,10
From: https://www.cnblogs.com/InsiApple/p/17570593.html

相关文章

  • new/delete/malloc/free
    new/deletenew和delete是C++中的运算符,不是库函数,不需要库的支持。new的工作机理string*sp=newstring("avalue");//一个new表达式new表达式调用一个operatornew(或者operatornew[])的标准库函数,该函数分配一个原始的,足够大小的,未命名的内存空间编译器运行相应的构造函数......
  • C++ 操作文本文件
    C++操作文本文件C++把IO封装成类33​操作文本文件需要包含头文件#include<fstream>​写文件(输出流)步骤(四步)创建输出流对象​ofstreamfp;//创建输出流对象​打开文件,⚠打开模式缺省时如果文件不存在就创建,文件存在则截断内容​fp.open("文件路径",打开模式);......
  • c#、winfrom在一个窗体中鼠标双击datagridview1选中某行,将其选中的行的所有数据在data
    效果展示:代码逻辑:首先在datagridview1中按条件查询数据,然后在datagridview2在查询和datagridview1中一样的Select语句,只不过在datagridview2的查询语句中需添加where条件获取datagridview1在选中行的id,在datagridview2显示就好了代码:单据筛选按钮 privatevoidbutton1_Click......
  • clion申请教育认证
    clion申请教育认证1、注册jetbrains账号jetbrains注册账号网站链接邮箱没有限制,qq邮箱即可,注册时候会给qq邮箱发送邮件,前往qq邮箱进行确认即可,如下图。2、教育认证点击注册完页面的Applyforafreestudentorteacherlicense选项或者跳转教育认证https://www.jetbrain......
  • Navicat连不上mysql8
    今天使用navicat连接mysql8,发现错误连连错误1:1130-Host'192.168.50.2'isnotallowedtoconnecttothisMySQLserver  错误2:2059-Authenticationplugin'caching_sha2_password'cannotbeloaded:Thespecifiedmodulecouldnotbefound  登录mysql,并切......
  • go 结构体嵌套interface
    packagemainimport"fmt"//结构体嵌套接口,可以在结构体绑定的方法直接实现接口中的方法,直接调用接口中的方法typeaainterface{ a() b()}typeworldstruct{ aa Ageint}func(hworld)a(){ fmt.Println("helloa方法")}func(hworld)b(){ fmt.Println("hello......
  • 查看 docker 服务
    查看Docker服务Docker是一个开源的容器化平台,可以帮助开发者快速构建、部署和运行应用程序。在使用Docker之前,我们需要先了解如何查看Docker服务的状态,确保它已正确安装并正在运行。1.检查Docker是否已安装首先,我们需要检查Docker是否已经安装在我们的机器上。在Li......
  • 触摸屏与PLC之间无线Ethernet通信
    在实际系统中,同一个车间里分布多台PLC,由触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大且不美观,这种情况下比较适合采用无线通信方式。本方案以威纶通触摸屏和2台西门子S7-200SMART为例,介绍触摸屏与多台PLC的无线Ethernet通信......
  • 小白也能看懂的 ROC 曲线详解
    作者:PrimiHub-KevinROC曲线是一种坐标图式的分析工具,是由二战中的电子和雷达工程师发明的,发明之初是用来侦测敌军飞机、船舰,后来被应用于医学、生物学、犯罪心理学。如今,ROC曲线已经被广泛应用于机器学习领域的模型评估,说到这里就不得不提到TomFawcett大佬,他一直在致力于......
  • 机器学习笔记
    机器学习主要介绍基于统计学的MachineLearning方法,主要的参考书:周志华《机器学习》(西瓜书)鲁伟《机器学习公式推导与代码实现》刘建平-机器学习随笔-博客园预备知识机器学习三要素:模型、策略、算法。统计知识统计学的目标是利用概率论的数学工具,去推断总体的信息。一般......