托管与非托管的交互问题(函数调用)

2023-10-31

记录一下免得以后忘记;

交互首先应该要解决数据结构的处理,这个资料较多,不记录了;

1,

托管 调用 非托管(用的较多):

[DllImportAttribute("dll库文件", EntryPoint = "函数", ......非托管函数的调用约定,编码等设置)

extern void demo2();

2,

非托管 调用 托管(一般用于回调):

public class TestDelegateCallback
{
	[DllImport("test.dll", EntryPoint="setAddFunc")]
	static extern void DLL_SetAddFunc(AddDelegate func);
	
	[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
	delegate int AddDelegate(int a, int b);
	
	
	static AddDelegate _addFunc;
	
	public TestDelegateCallback()
	{
		_addFunc = add;
		DLL_SetAddFunc(_addFunc);
	}
	
	
	private static int add(int a, int b)
	{
		return a + b;
	}
}

注意:

1, UnmanagedFunctionPointer    可设置 托管代码中 委托的 调用约定;当然在非托管的回调函数声明中将调用约定设置成非托管中的默认约定也是可以的(大多数时候是stdcall)

2, 参数类型是委托, 要保证在c++中调用时, 委托不能被回收; 我这里用的是static的, 以防止被回收; 实际要不要用static根据回调的场景来决定;

3, 必须有一个委托变量, 这里也就是_addFunc, 因为参数类型是委托, 如果不用一个成员变量, 则在调用DLL_SetAddFunc时会生成一个临时的委托变量, 而调用结束后这个临时的委托变量随时会被回收.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

托管与非托管的交互问题(函数调用) 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Python编程基础题(20-宇宙无敌加法器)

    Description Input 输入首先在第一行给出一个 N 位的进制表 0 lt N 20 以回车结束 随后两行 每行给出一个不超过 N 位的非负的 PAT 数 Output 在一行中输出两个 PAT 数之和 Sample Input
  • 点位运动

    梯形速度规划是最简单的速度规划方法 加速度是常数 规划过程中只需要控制速度和位移与时间的关系 如图所示 整个过程分为 加速段 匀速段 减速段 每一个轴在规划静止时都可以设置为点位运动 在点位运动模式下 各轴可以独立设置目标位置 目标速度 加
  • linux/windows下查看目标文件.a/.lib的函数符号名称

    1 linux下 objdump t 查看对象文件所有的符号列表 例如 objdump t libtest o 2 nm列出目标文件 o 的符号清单 例如 nm s filename a filename o a out 3 列出所有定义的
  • jq中快速返回祖先元素

    div class one div class two div class three div class focus 我是这个div div div div div
  • 解决页面favicon.ico文件不存在提示404问题

    所谓favicon 即Favorites Icon的缩写 顾名思义 便是其可以让浏览器的收藏夹中除显示相应的标题外 还以图标的方式区别不同的网站 当然 这不是Favicon的全部 根据浏览器的不同 Favicon显示也有所区别 在大多数主流
  • 逗号和分号

    上面的程序
  • 将python代码打包成可执行文件

    文章目录 打包工具 使用 pyinstaller 安装pyinstaller库 打包 Python是一种高级编程语言 它具有易学易用 跨平台等优点 因此在开发中得到了广泛的应用 然而 Python代码需要在Python解释器中运行 这对于一
  • UML类图几种关系的总结

    UML类图几种关系的总结 转载链接 http blog csdn net sunboy 2050 article details 9211457 UML类图 描述对象和类之间相互关系的方式包括 依赖 Dependency 关联 Associ
  • mac生成树形结构

    第一步 安装tree brew install tree 第二步 在要展示树结构的文件里面打开终端 运行命令 tree d 只显示文件夹 tree L n 显示项目的层级 n表示层级数 比如想要显示项目三层结构 可以用tree l 3 tr
  • firefox安装selenium插件

    1 目前新版类似Firefox58不兼容 打开 https addons mozilla org en US firefox addon selenium ide 网址 显示add to firefox为灰色 下载Firefox48即可 2
  • R:RStudio和RStudio Server

    RStudio是R语言开发中的利器 是最好用的R语言IDE集成环境 RStudio Server更是利器中的神器 不仅提供了Web的功能 可以安装到远程服务器上 通过Web进行访问 还支持多用户的协作开发 RStudio 是一个强大的 免费
  • IDEA——手把手教你mybatis的使用(新手教程)

    说到Mybatis 很多人不知道这是用来干什么的 简单来说就是用来优化JDBC的使用 我们可以理解为一个这样的流程 数据库 gt JDBC gt MyBatis gt Java 今天来教一下简单的mybatis使用方法 对于初学者很友好 目
  • C++基础(11)类模板

    1 类模板 类模板和函数模板的定义和使用类似 我们已经进行了介绍 有时 有两个或多个类 其功能是相同的 仅仅是数据类型不同 类模板用于实现类所需数据的类型参数化 include
  • Java并发工具之CyclicBarrier

    一 简介 摘自 Java并发编程的艺术 一书中 CyclicBarrier的字面意思是可循环使用 Cyclic 的屏障 Barrier 它要做的事情是 让一组线程到达一个屏障 也可以叫同步点 时被阻塞 直到最后一个线程到达屏障时 屏障才会开
  • VQ-VAE

    前言 之前总结了一篇VAE的 这次来个它的离散版本 VAE Variational Autoencoder 简单记录 论文 Neural Discrete Representation Learning 代码 https gitee com
  • 微信小程序+TP5——token令牌生成

    token令牌的作用 客户端每次登录服务器端都会生成一个唯一的token令牌值 并返回到客户端 而服务器端会默认将token令牌值作为key 用户信息作为value 一一对应存入缓存中 当用户每一次发送请求时 都要携带这个token令牌值
  • Linux基本指令(下)

    Linux基本指令 下 前言 cat指令 more命令 less命令 head命令 tail命令 wc指令 date指令 cal指令 find指令 grep指令 top命令 alias命令 zip unzip命令 tar命令 bc命令 un
  • linux下c程序调用cuda,Linux下创建CUDA程序动态链接库示例

    1 g W Wall Wimplicit Wswitch Wformat Wchar subscripts Wparentheses Wmultichar Wtrigraphs Wpointer arith Wcast align Wret
  • Sql优化

    以MySQL DBMS MySQL Database Management System 数据库管理系统 为例 测试数据量300w 不同方案效率对比 一 测试数据导入 1 新建数据库sql optimization 设置字符集utf8 2
  • 托管与非托管的交互问题(函数调用)

    记录一下免得以后忘记 交互首先应该要解决数据结构的处理 这个资料较多 不记录了 1 托管 调用 非托管 用的较多 DllImportAttribute dll库文件 EntryPoint 函数 非托管函数的调用约定 编码等设置 extern