如何将 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 一起使用 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

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

    如何为使用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