问题标签 [native-code]

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 投票
0 回答
588 浏览

debugging - 如何向 Visual Studio 指示第三方 dll 源代码在哪里?

我正在为 C 库编写 C++/CLI。我有图书馆的源代码。当我启动调试会话时,我无法进入 C dll,VS 说源代码不可用。那么如何告诉VS它在哪里呢?谢谢...我已经尝试指向工具->选项->调试->符号来添加pdb所在的文件夹,但它没有任何改变。问候

已解决:原来我需要将 dll 和 .pdb 文件复制到调用 C++/CLI dll 的 C# 项目的 Debug 文件夹中。

0 投票
0 回答
103 浏览

mfc - 调用时 CObject 指针初始化为空

当我调用代码时

从托管代码到互操作,CObject 指针被初始化为 NULL 或未定义的值。但是,当我在本机代码中执行它时,它会被正确初始化。这是为什么??

0 投票
2 回答
961 浏览

xamarin.ios - Monotouch mtouch 参数问题

在编译项目时很难让这两个参数发挥得很好。任何帮助将非常感激。

flite 是一个原生 C 库,而 TestFlight 是一个 Obj-C 库。知道如何让他们一起玩得很好吗?

lflite 库运行良好,然后我添加了 TestFlight,事情发生了变化。该解决方案编译但在启动时崩溃:

0 投票
1 回答
1212 浏览

windows - 有没有一种工具可以结合 32 位 + 64 位应用程序并将它们打包到一个 32+64 位应用程序中

在 Windows 2008 R2 服务器(服务器核心安装)中 wow64 不再是必需的组件

我可以使用与 64 位应用程序相同的源代码编译 32 位应用程序(这里和那里有一些 ifdef)。

是否有一种工具可以将我的应用程序的两个版本放在一个可执行文件中,以便我的 32+64 位应用程序可以在纯 32 位 Windows仅 64 位 Windows 上运行?

请注意,我不是在谈论打包器,因为打包器本身是 32 位或 64 位的。

0 投票
1 回答
2223 浏览

android - Android NDK Native LIB,如何处理现有的 stdio?

我有现有的本机 C/C++ 代码,我目前正在通过 NDK 将其构建到本机 lib 和 Android 应用程序中。本机代码充满了打印到 stdout 和 stderr 的语句。有这样的最佳实践吗?我可以忽略它们还是需要通过并将它们重定向到 Android 日志记录系统?

我将现有代码构建为独立的本机二进制文件并通过 adb 运行它,我看到了从 printf(到 stdout)到控制台的所有输出。

似乎要问一个愚蠢的问题,但 stdio 在哪里适用于 Android 应用程序?

0 投票
1 回答
1337 浏览

windows - 为什么在内核模式下调用 ZwCreateKey 似乎绕过了 Windows 安全性?

与我合作的团队最近面临着使我们的软件与第三方虚拟化软件兼容的挑战。该软件使用内核驱动程序执行 Windows 本地注册表 API(ZwCreateKey等)的挂钩。它通过挂钩 Ntdll 中的调用来工作。我们的软件也相当低级,在某些情况下需要访问真实的注册表而不被挂钩。

我们正在探索使用我们自己的内核驱动程序来调用ZwCreateKey等的可能性,以我们的名义绕过它们的钩子。这实质上意味着创建一个 NT Legacy 驱动程序和一个提供我们自己的本地注册表功能的用户模式库。库和驱动程序非常简单,我们只需使用 IOCTL 将所有参数传递给ZwCreateKey我们的驱动程序,然后我们调用内核版本的调用并返回结果。

这种方法效果很好,我们现在似乎有了一个在虚拟化时读取/写入真实注册表的系统。唯一的问题是我们的新系统似乎绕过了注册表对象上的 Windows 安全性。

ZwCreateKey采用这样的访问掩码:

我的理解是,虽然我们现在在内核模式下运行,但我们仍然拥有用户令牌的上下文。这应该意味着内核版本ZwCreateKey将失败,就像访问掩码测试失败时用户一样。实际发生的情况是,即使使用有限的令牌,当我们的驱动程序被调用时,它也能够在受限用户调用时在受限部分 HKLM 中创建密钥。是什么赋予了?我们应该自己执行 ACL 检查吗?我们需要做些什么来限制我们自己在内核模式下的权限吗?非常感谢任何帮助。

0 投票
1 回答
569 浏览

c# - 在 C# 和本机 C++ 之间共享内存

有没有办法在托管代码和本机代码之间共享内存,就像内存映射文件一样(我正在使用.Net 2.0,所以这个版本中没有 MMF),我是这个 .Net 的新手,所以实际上是什么编组?我这样做是为了在托管代码和非托管代码之间进行通信,但我的问题是在封送处理期间,我们是否将非托管的内存部分复制到托管内存区域,或者我们共享相同的地址空间,因此当我们从非托管代码更改变量时,那么托管代码中的值也会改变吗?

0 投票
1 回答
1759 浏览

android - Android NativeActivity OpenGL-ES 原生应用程序:如何获得小于全屏的表面

我有使用 Google 的 native_app_glue 包装器的原生 Android 应用程序。我想获得一个小于全屏的表面来渲染 GLES。在使用从 Activity 派生的 java 层的 GLES 应用程序中,这是通过 Java 层中的 getWindow().setLayer() 完成的。但是,我的项目情况不允许我使用此解决方案。

通过 nativeActivtiy 和 native_app_glue 层,我可以使用 JNI 获取 Java 类和回调到 Java,但不能修改视图层次结构。通过 JNI 从我的 C 代码回调 setLayers() 时,我收到此错误,因为 NativeActivity 与创建 View 层次结构的线程不在同一个线程中。

E/AndroidRuntime(21503): android.view.ViewRoot$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸它的视图。

这是我的代码:

你们中的一些人可能建议的解决方案是使用 glViewport() 绘制到小于全屏。此解决方案在视觉上有效,但性能很差,因为 EGL 驱动程序仍在处理全屏表面。

我想知道这种方法是否是最好的解决方案,因为它在架构上与使用本机应用程序包装器相比有很大的变化:a)放弃本机应用程序胶水包装器并在与 JVM 相同的线程中运行本机代码(或至少一部分)b)从 NativeActivity 派生一个 Java 类,它通过 setContentView() 创建视图层次结构 c) 在与 Java 相同的线程中运行的本机代码中使用 JNI 调用 setLayout() d) 其余的本机代码可以根据需要在不同的线程中运行

我不确定上述方法是否可行,我是否会遇到障碍。

0 投票
1 回答
3038 浏览

android - 是否可以从 .apk 文件中获取 Android.mk 或本机源文件?

从 .apk 文件中获取 Java 源文件似乎很容易。但是是否可以通过工具或棘手的方法从 .apk 文件中获取Android.mk本机源文件?

我正在研究 Android 应用程序本机代码安全性,因此这些文件对我来说非常重要。谢谢。

0 投票
1 回答
431 浏览

android - 从本机代码访问生成的 Android R 类

我想知道是否有一种方法可以从本机代码访问 R 类属性,我需要它来读取一些生成的 ID,每次我对项目进行干净构建时可能会更改这些 ID,我不想手动将它们传递给本机部分。

编辑 正如@trashkalmar 所建议的,这里是解决方案: