如何将 cdecl 回调与 pinvoke 一起使用

2024-02-27

我有一个带有 cdecl 回调的 C 库。我如何在 c# 中使用这些。

一切似乎都在说它们一定是 stdcall 回调

需要明确的是:

delegate int del();
[dllimport("mylib.dll",CallingConvention=CallingConvention.Cdecl)]
public static extern int funcwithcallback(del foo);

其中 del 必须按 cdecl 方式调用


看看这个。该功能自 1.1 起就已存在,因此它应该涵盖您正在使用的任何 .NET 版本。您只需指定 CallingConvention。

MSDN 上的 CallingConvention 文档 https://msdn.microsoft.com/en-us/library/z6f9ef9d(v=vs.110).aspx

您还可以看看代码项目上的这篇文章:

在 C# 中使用 _CDECL 调用约定 http://www.codeproject.com/KB/cs/cdeclcallback.aspx

编辑:另外,这是来自 FreeImage.NET 的示例。

static FreeImage_OutputMessageFunction freeimage_outputmessage_proc = NULL;
DLL_API void DLL_CALLCONV
FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf);

然后在 C# 方面,只需:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void FreeImage_OutputMessageFunction(FREE_IMAGE_FORMAT
format, string msg);

[DllImport(dllName, EntryPoint="FreeImage_SetOutputMessage")]
public static extern void SetOutputMessage(FreeImage_OutputMessageFunction
omf);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 cdecl 回调与 pinvoke 一起使用 的相关文章

  • C# 静态类型不能用作参数

    public static void SendEmail String from String To String Subject String HTML String AttachmentPath null String Attachme
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • 影响流星服务的页面编码?

    如何为使用meteor服务的页面设置编码 目前我的 Firefox 不断输出此警告 The character encoding of the HTML document was not declared The document will
  • Flask 和 Flask-Login 新手 - ImportError:没有名为登录的模块

    看来 Flask login 的安装有问题 尽管使用以下命令成功安装 pip install flask login 我的 app py 文件 from flaskext login import LoginManager lm Login
  • 如何在 iText 中创建具有多个标题的表格?

    我如何实现以下目标 目前我可以得到单头表 如何在具有 colspan 的列上方添加列标题 要创建具有多个标题的表格 请使用 Table addHeaderCell 如下例所示 String 文件名 test pdf PdfDocument
  • 在 WP7 中将照片上传到 picasa 时出现未经授权的访问异常

    我有以下代码尝试将图片上传到 picasa 网站 当我尝试上传时 出现未经授权的访问异常 我不知道如何获取 AuthToken 这是我的代码 如果您有任何线索 请告诉我 public delegate void UploadPhotoCal
  • 在 Python 中监听连接时接收命令行输入

    我正在尝试编写一个程序 让客户端连接到它 同时服务器仍然能够向所有客户端发送命令 我正在使用 扭曲 解决方案 我该怎么办 这是我到目前为止的代码 我知道 Twisted 已经使用非阻塞套接字 import threading print t
  • JAVA执行Unix系统命令问题

    我在从 JAVA 代码执行系统命令时遇到一个奇怪的问题 其实我想得到Mac OSX来自我的 JAVA 应用程序的系统信息 为此 我正在使用 Runtime getRuntime exec system profiler detailLeve
  • HTML 5 文件输入 iOS 和 Android [Cordova/Phonegap]

    在 PhoneGap 应用程序中 我尝试使用 HTML5 使用相机input像这样的标签 使用 CLI 创建新项目 添加iOS和Android平台 添加相机插件 为两种设备构建 在两台设备上运行 实际设备 iPhone 5 配备 iOS 7
  • DataGridView 重新加载后保存过滤

    我在 C 中使用 DataGridView 时遇到一些问题 case is 我对数据库进行一些更新 然后使用新值重新加载 DataGridView myDataGridView DataSource myDataSet Tables 0 一
  • Android Canvas.drawText

    我有一个视图 我正在 onDraw Canvas canvas 方法中使用 Canvas 对象进行绘制 我的代码是 Paint paint new Paint paint setColor Color WHITE paint setStyl
  • CSS DIV 内联在底部

    我有3个部门要放inline at the bottom 我不知道该怎么做 任何人都可以帮助我吗 The expected output 我尝试过的代码 feature description margin top 20px padding
  • 从 CentOS 7 或 RHEL 7 中完全删除 MariaDB 或 MySQL

    我在 CentOS 7 上安装了 MariaDB 但我在某些配置上遇到了一些问题 现在它完全配置错误 因此 我想用 yum remove mariadb mariadb server 删除MariaDB 然后用 yum install ma
  • 使用 R 分割字符串和计算字符的更快方法?

    我正在寻找一种更快的方法来计算从 FASTA 文件读取的 DNA 字符串的 GC 含量 这归结为获取一个字符串并计算字母 G 或 C 出现的次数 我还想指定要考虑的字符范围 我有一个工作函数相当慢 它导致我的代码出现瓶颈 它看起来像这样 c
  • 如何从收据中提取相关信息

    我正在尝试结合使用 Opencv Tesseract 和 Keras 从一系列不同的收据中提取信息 该项目的最终结果是 我应该能够使用手机拍摄收据照片 并从该照片中获取商店名称 支付类型 卡或现金 支付金额和找零 到目前为止 我已经使用 O
  • ASP.NET MVC 4 捆绑 - 调试模式下的单个文件 URL

    Problem 在 ASP NET MVC 4 5 中完成的 HTML5 离线应用程序中 我们使用框架的捆绑和缩小样式和脚本内置功能 http www asp net mvc tutorials mvc 4 bundling and min
  • Objective-C:即使为 AVSystemController_SystemVolumeDidChangeNotification 添加观察者,也没有调用volumeChanged?

    void viewDidLoad NSNotificationCenter defaultCenter addObserver self selector selector volumeChanged name AVSystemContro
  • 加密能保证完整性吗?

    为了构建一个安全的系统 我们可以在开始安全编程之前假设加密保证完整性是真实的吗 无论是对称密钥还是公钥 加密 是我的问题 证明良好 如果没有 有哪些 漏洞 你能给出一个 例子 不 如果您考虑一下 这一点很容易看出一次性垫 http en w
  • 如何在 GORM 中将 PostgreSQL 函数设置为默认值?

    我想要类似的东西 type User struct ID int sql default
  • 如何找到DWT信号变换的频段?

    我是信号处理方面的新手 我想找出 Daubechies 小波 db4 变换输出的每个级别的频率范围 转换是通过 PyWavelet 完成的 我正在 python 中工作 下面的代码输出 5 个细节级别和 1 个近似值 但是我不确定每个级别描
  • 如何区分 bitbucket 管道中的两个 git 分支

    背景 我想确保推送分支上的所有提交消息都有时间日志 ie add readme spend 5m Problem 我想获取 bitbucket 管道中两个 git 分支之间的提交差异 这是我的 yaml 管道配置 pipelines def
  • 如何将 cdecl 回调与 pinvoke 一起使用

    我有一个带有 cdecl 回调的 C 库 我如何在 c 中使用这些 一切似乎都在说它们一定是 stdcall 回调 需要明确的是 delegate int del dllimport mylib dll CallingConvention