问题标签 [cppsharp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1160 浏览

c# - CppSharp 生成错误的代码

TL;DRCppSharp 为特定的 C++ 方法签名生成错误的绑定代码。如何使用 TypeMaps 和/或传递来解决这个问题?是否有我可以使用的类型转换的文档或示例?

我正在使用CppSharp为 OBS studio 生成 C# 绑定,以便为其编写插件。

使用以下生成器从 OBS.h 生成代码时:

我发现它会生成:

和相应的公共方法

这显然不能编译。C++ 定义是:

在手写 PInvoke 中,可以通过多种方式解决此问题(声明具有正确数量的 float 成员的结构,或 a[MarshalAs(UnmanagedType.LPArray, SizeConst = 3)]和 float[] 传递或将 PInvoke 参数声明为 IntPtr)。

那么我的问题是:如何使用 CppSharp 及其代码转换工具(TypeMap?Pass?什么?)来实现任何正确的翻译?我可以将其修复为 hack,但由于我与我的 C++ 库互操作,我更愿意学习使用 CppSharp 执行此操作的正确方法(学习钓鱼)。

提前致谢!

0 投票
1 回答
2683 浏览

c# - C++ 库的 C# 绑定

我为 libpostal 库创建了 ac# 绑定(指向 LibPostalNet 的链接)。

我使用 CppSharp 创建绑定。它有效,但我不知道如何转换此代码:

CppSharp 以这种方式转换代码:

代码应该返回一个长度为 num_components 的字符串数组。

你能帮我解决这个问题吗?

0 投票
0 回答
233 浏览

c# - C#中带有指针的C函数

我目前正在使用 CppSharp,并为 SDL2 库生成了绑定。它几乎可以工作,但我无法使用库的事件部分。在 C 中,您只需像这样使用 API

但是在带有生成绑定的 C# 中,我做不到:

它可以编译,但 e.Type 始终为零,这是不正确的,就像 C# 对象在内部永远不会改变。有没有办法让 C# 像 C 一样传递 SDL.SDL_Event 。

作为参考,这里是绑定(我不想更改它们,因为它们是由 CppSharp 生成的):

如何让事件循环在 C# 中工作?

编辑:SDL_Event 生成的结构

0 投票
0 回答
176 浏览

android - CppSharp 是否支持为 Google Oboe Android 库生成包装器?

我不是 C++ 程序员,但想使用 Google 的 Oboe 库来实现低延迟音频。目前我正在使用 AudioTrack,但速度不够快。

我正在尝试使用 CppSharp 生成 P/Inoke 包装器。这甚至支持 libOboe.so 文件吗?我为 .Net Framework v4.7.2 编写了一个控制台应用程序。必须将 Platform 目标设置为 x64,否则它不会加载 CppSharp.Parser 库(格式无效)。

它做了一些事情,但只会产生错误。尝试将 ParseSourceFile 更改为 ParseLibrary 仅导致 NotFound。

除了 GitHub 上的内容之外,还有其他文档吗?

好的,这是我从 CppSharp 项目的 GitHub 上的示例目录中复制的代码

这是输出的一部分。它看起来好像将库视为名称 ParseSourceFile() 所暗示的文本文件。将其更改为 ParseLibrary() 只会导致 NotFound 错误。

0 投票
1 回答
408 浏览

c# - 调试从 C++ 调用的 C# dll(嵌入 Mono)

我有一个用 C++ 编写的运行时(嵌入了 Mono),它使用mono_jit_exec和调用用 C# 编写的 dll 中的函数mono_runtime_invoke。胶水代码是用CppSharp生成的——我认为这里不相关,只是提一下。

到目前为止一切都很好,我可以双向交流。

我现在想要的是仅使用 Visual Studio 调试 C# 代码(我在 macOS 上使用的是 2019 版)。所以在我的 C# 项目中,我去运行配置并选择了指向我的 C++ 程序集的启动外部程序选项。之后,我设置了一些断点,但是当我在调试模式下运行 C# 项目时,它们永远不会被触发。

为什么不起作用 - 还有其他需要做的事情吗?是因为涉及到 Mono 吗?

0 投票
1 回答
102 浏览

cppsharp - 缺少对 Cppsharp 程序的 netstandard 的引用

我正在尝试按照入门指南使用 Visual Studio 2015 使用 Cppsharp 开始我的第一个项目。

我遵循的步骤是:

  1. 创建新的 C# 控制台项目
  2. 使用 Nuget 安装 Cppsharp
  3. 在项目中添加对 Dll 的引用
  4. 根据这个旧帖子中的示例创建 C# 源文件

虽然帖子中的示例很旧,但它似乎仍然与入门指南一致。下面列出了完整的程序。

但是,我已经面临错误参见图片

我无法找到添加此参考的方法。我发现的一个解决方案建议针对更高的 .NET 版本(4.7.2),我尝试了这个,但错误仍然存​​在。

任何人都可以帮助克服这个问题吗?