C# 中的 swig - 在可移植类库中找不到 HandleRef

2023-12-06

我正在尝试使用 Swig 将我的 C++ 代码包装为 C#。如果C#文件的输出目标是类库,则没有错误并成功构建。

但是我想同时支持 Windows Phone 8.1 和 Windows 8.1,因为这个原因我使用可移植类库而不是普通的类库。在这种情况下,我收到错误消息:

命名空间“System.Runtime.InteropServices”中不存在类型或命名空间名称“HandleRef”(是否缺少程序集引用?)

我真的不知道我错过了什么。这个问题的解决办法是什么? 我猜 Windows Phone 8.1 和 Windows 8.1 不支持 HandleRef 但我不确定。如果是这样,我该怎么办?


这个问题有点老了,但是在使用 .NET Core 时遇到了同样的问题,我想我应该分享我的解决方案。


更改 imtype 和 csbody

告诉 SWIG 停止使用HandleRef你必须改变%typemap(imtype) and %typemap(csbody)所有默认(或特定)类型。

imtype指定出现在您的modulenamePINVOKE方法参数。将其更改为可以从指针类型编组到指针类型的类型。

csbody取代你的整个身体SWIGTYPE_类,这意味着您必须实现自己的(您必须更改存储为的变量HandleRef)。如果您的新实现没有getCPtr你必须改变的方法%typemap(csin) as well

这是一个使用的示例System.IntPtr代替HandleRef,将其放在接口文件的顶部:

%typemap(imtype) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "System.IntPtr"
%typemap(csin) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "$csinput.Pointer"

%typemap(csbody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) %{

  private volatile System.IntPtr swigCPtr;

  protected $csclassname() 
  {
    swigCPtr = System.IntPtr.Zero;
  }

  internal System.IntPtr Pointer
  {
    get
    {
      return swigCPtr;
    }
  }
%}

Note: SWIGTYPE是任何类型的占位符。

参考:SWIG 3.0 文档 - 第 20 章“SWIG 和 C#”

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

C# 中的 swig - 在可移植类库中找不到 HandleRef 的相关文章

随机推荐

  • 将类导出到 DLL [重复]

    这个问题在这里已经有答案了 你好 我现在对 DLL 有点困惑 所以我来这里询问哪里有很多编程专家 所以我得到了这个名为 GUI h 的类和 GUI cpp class GUI public GUI void virtual GUI void
  • itertools 中的 izip_longest:迭代器内的 IndexError 是如何工作的?

    In this问题 lazyr询问以下代码如何izip longest迭代器来自here works def izip longest from docs args kwds izip longest ABCD xy fillvalue g
  • EF6 与 MySQL。字典中不存在给定的键

    我有使用链接到 MySQL 数据库的 Code First Entity Framework 6 的 Asp Net MVC 5 应用程序 当我第一次创建数据库时 它工作正常 但是当我对模型进行更改时 然后添加迁移 更新数据库 后显示错误
  • Fortran 未格式化输出,每个 MPI 进程写入数组的一部分

    在我的并行程序中 有一个大矩阵 每个进程计算并存储其中的一部分 然后 程序通过让每个进程以正确的顺序写入自己的矩阵部分 将矩阵写入文件 输出文件为 未格式化 形式 但是当我尝试以串行代码读取文件时 我分配了正确的大矩阵大小 我收到了一个我不
  • Elmah:在 IIS7 下未调用 ErrorLog_Filtering 事件处理程序

    我在 Elmah 中启用错误日志过滤 并希望在 ErrorLog Filtering 事件处理程序中以编程方式执行此操作 它在 Visual Studio 开发服务器下运行良好 但一旦我进入 IIS7 在我的开发计算机上本地或在我的 Web
  • 无法读取其他进程正在使用的文件中的所有行

    我正在尝试读取某些程序正在使用的日志文件的所有行 当我尝试这样做时 我收到异常 System IO IOException was unhandled file used by another process 于是我在网上搜索了一下 找到了
  • Android - 在 webview 中加载 PDF

    我有这个 webview 代码 我希望当用户单击 PDF 链接时可以打开 PDF 文件 这是代码 你能告诉我我必须在其中的 PDF 区域中放入什么吗 我尝试了很多不同的方法 但根本无法查看 PDF 谢谢您的帮助 webview setWeb
  • Xcode 退出代码 1 - 重复符号

    抱歉 我知道这个问题已经被覆盖了 只是我无法解决这个问题以挽救我的生命 如果有人能清楚地解释我可能做了什么以及我可以做些什么来解决这个问题 我将永远感激不已 这是我的错误 命令 Xcode 4 Platforms iPhoneOS plat
  • 如何在 Win32 控制台应用程序中注册不可见窗口类?

    我正在尝试在 Win32 控制台应用程序中注册一个不可见的窗口 我的目标是监听 WindowProc 中的原始输入 以 1 将其显示在控制台上 以及 2 执行额外的计算 例如通过 Web 套接字发送信息 我跟着这篇 CodeProject
  • PyQt:插槽被调用多次

    我使用 Qt Designer 创建了一个自定义小部件 通过使用 pyuic 我将 ui 文件转换为 py 文件 我的意图很简单 我需要找出选择了哪个单选按钮 这是 Designer 转换后的 python 脚本ui persistence
  • C#:制作同时安装 WPF 应用程序 (ClickOnce) 和 Windows 服务的安装程序

    我目前有一个包含 2 个项目的 VS 解决方案 一个 WPF 应用程序和一个 Windows 服务 现在 我已成功让 ClickOnce 能够安装我的 WPF 应用程序 但我还希望在此安装过程中安装 Windows 服务 项目中的服务 我已
  • 在jquery中实现圆形滚动条

    我正在寻找一个 jquery 插件来模拟垂直选框 我需要它来支持 滚动任何不透明 非结构化 内容 没有 li 没有 div 用户甚至可以从 Word 进行粘贴 自动恒定滚动速度 悬停时暂停 循环滚动 滚动到结束后 从头开始平滑地继续 没有向
  • 使用python将csv中的单列解析为文本文件

    我终于把 dbf 文件变成了 csv 但现在我很困惑如何将其解析为文本文件以供进一步编辑 我一直在阅读 csv 模块 但说实话 我的头开始旋转 其中很多内容对我来说似乎是希腊语 但是 如果可能的话 我想要使用模块 this 的代码 我的 c
  • 如何在 Scala 中迭代列表时修改列表的每个元素?

    我有一个如下声明的字符串列表 var re1 emoticons Nil 然后我用表情符号 字符串 填充了其中 我正在尝试添加一个 在每个字符串的开头re1 emoticons 修改原来的var 第一次尝试 re1 emoticons fo
  • 如何在 GNU Octave 中运行 Fortran 程序?

    我想在 Octave 中运行 Fortran 程序 我想这样做是出于自动化目的 并使用 Octave 进行所有数据处理 是否可以使用 cygwin 从八度运行 Fortran 程序 如果可以 您能给我一些沿着这个方向的指示吗 此外 我的系统
  • Play 商店中显示 10 英寸平板电脑的应用程序列表,但不显示 7 英寸平板电脑的应用程序列表

    我已经按照其他帖子的建议检查了使用权限 使用功能和支持屏幕 我已使用以下清单文件在 Playstore 中上传了一个应用程序作为更新 以前的版本运行良好 该项目之前在 eclipse 中 现在已转移到 android studio 我遇到了
  • .NET 中从 URI 到图像

    我有一个像这样的 URIdata image svg xml base64 PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI PjwhRE9DVFlQRSBzdmcgUFVCTElDI 在我的
  • 即使我已经涵盖了所有情况,仍收到“控制到达非空函数末尾”警告

    为什么如果我有两个条件 而两个条件都在函数中返回正确的类型 我会收到警报 控制到达非 void 函数的末尾 Wreturn type bool EtherTrafGen isGenerator if multipacket return p
  • 无法使用 Gitolite (centos) 添加用户

    我是 gitolite 的新手 我已经在远程服务器上安装了 gitolite 192 168 1 109 所以我可以 git 克隆 gitolite admin git git clone ssh email protected gitol
  • C# 中的 swig - 在可移植类库中找不到 HandleRef

    我正在尝试使用 Swig 将我的 C 代码包装为 C 如果C 文件的输出目标是类库 则没有错误并成功构建 但是我想同时支持 Windows Phone 8 1 和 Windows 8 1 因为这个原因我使用可移植类库而不是普通的类库 在这种