标签: native

哪个更好/更安全使用:HandleRef或IntPtr(来自Microsoft的较新源代码不再使用HandleRef)

例如,在旧的.NET Framework 2.0源代码(Windows窗体,Visual Studio 2005 - Whidbey)中,使用HandleRef定义了GetClientRect函数:

    [DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
    public static extern bool GetClientRect(HandleRef hWnd, [In, Out] ref NativeMethods.RECT rect); 
Run Code Online (Sandbox Code Playgroud)

在新的Windows API代码包(来自Microsoft,2009/2010)中,使用IntPtr定义了相同的函数:

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool GetClientRect(IntPtr hwnd, ref CoreNativeMethods.RECT rect);
Run Code Online (Sandbox Code Playgroud)

实际上,HandleRef不用于任何Windows API Code Pack源文件,而是在旧.NET Framework源文件中的本机方法签名中大量使用.

c# winapi interop native intptr

15
推荐指数
2
解决办法
6710
查看次数

如何在Delphi中使用.Net程序集而无需在GAC或COM中注册?

我有一个简单的任务:

有没有可能写一个Delphi DLL并放一个.Net程序集(只有一个接口有4个方法和一个实现接口的类)除了它并从Delphi DLL调用它?

我的意思是,如果我为tlb创建一个tlb和一个delphi单元,而不注册Assembly/tlb,我可以直接从.Net程序集导入.Net类型(相对文件名)吗?

最好的,thalm

编辑(我找到了):

大多数解决方案必须为COM注册至少一个dll/tlb.但我发现最有希望的事情是:来自Robert Giesecke的Unmanaged Exports,它是一个Visual Studio项目模板,它允许你编写静态C#(或任何.Net语言)方法,并从任何非托管语言调用它们,真棒:

class Test
{
    [DllExport("add", CallingConvention = CallingConvention.StdCall)]
    public static int Add(int left, int right)
    {
        return left + right;
    } 
}
Run Code Online (Sandbox Code Playgroud)

编辑2:它确实有效!你甚至可以控制编组类型,不可信!

.net delphi dll interop native

15
推荐指数
1
解决办法
5779
查看次数

跨平台本机打开/保存文件对话框

我正在为我的程序编写一个UI,使用opengl和SDL结合使用Lua和C++

我现在需要的是一些库,它允许我调用一个函数,向用户显示用于打开/保存文件的文件选择对话框.但是如果操作系统为这样的对话提供了本机功能,那么我想使用该对话框(例如Window的GetOpenFileName).

我需要支持的唯一平台是Windows和Linux,但我希望能够仍然使用我已编写的大部分SDL和openGL代码.

有哪些选择?

c++ user-interface dialog cross-platform native

15
推荐指数
4
解决办法
1万
查看次数

Android NDK限制?

我对Android平台上本机代码的限制有疑问.

基本上我已经开发了一个本机C代码库,它使用UDP套接字进行SIP/RTP,并使用OpenAL进行音频录制/回放 - 基本上是整个应用程序.我们的想法是尽可能使用本机C代码而不是Java代码.我想这样做是因为我将在其他平台上使用它.

我的问题很简单 - 是否可以只使用Java进行GUI,然后使用本机代码进行所有处理?当我的本机代码尝试创建套接字,绑定它,录制音频,播放它等时会发生什么 - 因为它是本机代码,我是否需要为它设置权限(例如应用程序访问麦克风和诸如此类)或将它只是绕过这个东西,因为它的本机代码?原生代码可以像在PC上那样在Android上做任何想做的事吗?

对不起,如果不清楚; 告诉我,我会尽力改进它

谢谢

c permissions android native android-ndk

15
推荐指数
1
解决办法
8711
查看次数

从命令行运行本机VS2012/C++ 64位单元测试

我正在尝试从命令行运行单元测试.我尝试使用以下命令使用mstest.exe程序:

E:\VS Projects\...\>"C:\Program Files (x86)\Microsoft Visual Studio 11.0\
    Common7\IDE\MSTest.exe" /testcontainer:mytest.dll 
    /testsettings:"E:\VS Projects\...\Local.testsettings"
Run Code Online (Sandbox Code Playgroud)

mstest程序响应是:

Microsoft (R) Test Execution Command Line Tool Version 11.0.50727.1
Copyright (c) Microsoft Corporation. All rights reserved.

Loading E:\VS Projects\...\Local.testsettings...
Loading mytest.dll...
mytest.dll
Unable to load the test container 'mytest.dll' or one of its 
dependencies. If you build your test project assembly as a 64 bit assembly, 
it cannot be loaded. When you build your test project assembly, select "Any 
CPU" for the platform. To run your tests …
Run Code Online (Sandbox Code Playgroud)

c++ dll unit-testing mstest native

15
推荐指数
1
解决办法
5041
查看次数

字段在JPA中的本机查询的值

如何获取本机查询(JPA)中某些字段的值?

例如,我想获得客户表的名称和年龄:

Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
Run Code Online (Sandbox Code Playgroud)

注意:我不想将结果映射到实体.我只是想获得该领域的价值.

谢谢

orm jpa field native

14
推荐指数
1
解决办法
2万
查看次数

通过NativeActivity NDK访问(更快的轮询)加速度计

我用NDK更快地搜索了关于轮询加速度计的教程/答案,但还没找到求解器.刚刚在这里找到了androiddevelopers文档.

我需要的是轮询加速度大约每秒100个样本(100Hz),默认情况下我的设备(三星Galaxy SL i9003与姜饼2.3.5)默认SENSOR_DELAY_FASTEST只能获得大约60个样本persecond(60Hz).因此,我尝试通过生成.c文件,通过NativeActivity访问传感器,我试图基于sensor.h和looper.h制作.c文件:

#include <jni.h>
#include <string.h>

#include <android/sensor.h>
#include <android/log.h>
#include <android/looper.h>

#define TAG "accelerondk"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)

#define LOOPER_ID 1
#define SAMP_PER_SEC 100 //i've changed to 120, even 10, but nothing happen

void Java_azka_web_ndk_AcceleroNDKActivity_startMonitoring(JNIEnv* env, jclass clazz) {
    ASensorManager* sensorManager = ASensorManager_getInstance();

    ALooper* looper = ALooper_forThread();
    if(looper == NULL)
        looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);

    ASensorRef accelerometerSensor = ASensorManager_getDefaultSensor(sensorManager,ASENSOR_TYPE_ACCELEROMETER);
    LOGI("accelerometerSensor: %s, vendor: %s", ASensor_getName(accelerometerSensor), ASensor_getVendor(accelerometerSensor));

    ASensorEventQueue* queue = ASensorManager_createEventQueue(sensorManager, looper, LOOPER_ID, …
Run Code Online (Sandbox Code Playgroud)

android native sensor accelerometer android-ndk

14
推荐指数
2
解决办法
1万
查看次数

Android - 在我自己的项目中包含原生StageFright功能

我目前正在开发一种应用程序,它需要记录音频,将其编码为AAC,对其进行流式传输,并在反向中执行相同的操作 - 接收流,解码AAC和播放音频.

我使用MediaRecorder成功录制了AAC(包装在MP4容器中),并使用AudioRecord类成功上传了音频.但是,我需要能够在流式传输时对音频进行编码,但这些类似乎都没有帮助我这样做.

我研究了一下,发现大多数有这个问题的人最终都使用像ffmpeg这样的本地库.

但我想知道,因为Android已经包含StageFright,它具有可以进行编码和解码的本机代码(例如,AAC编码AAC解码),有没有办法在我的应用程序上使用这些本机代码?我怎样才能做到这一点?

如果我只需要用他们的本机代码实现一些JNI类,那就太好了.另外,因为它是一个Android库,所以不会出现许可问题(如果我错了,请纠正我).

android native aac stream stagefright

14
推荐指数
1
解决办法
1万
查看次数

JQuery grep(...)VS本机JavaScript过滤器(...)函数性能

我测量了这两个函数的执行时间:

使用Chrome配置文件工具测量了以下方法的执行情况:

// jQuery GREP function
function alternative1(words, wordToTest) {
  return $.grep(words, function(word) {
    return wordToTest.indexOf(word) != -1;                    
  });
}

// Native javascript FILTER function        
function alternative2(words, wordToTest) {
  return words.filter(function(word) {
    return wordToTest.indexOf(word) != -1;                    
  });
}
Run Code Online (Sandbox Code Playgroud)

数组由words100万个随机生成的字符串构成.每种方法运行20次.令我惊讶的是jQuerygrep功能更快.

执行时间(20次执行):

  • jQuery grep函数26,31s
  • 原生JavaScript 过滤功能34,66s

你可以在这个jsFidle上重复测量- 执行需要一些时间,所以请耐心等待.

有没有解释为什么jQuery grep函数比原生 JavaScript 过滤器功能更快?

PS:这个问题的灵感来自于这个答案.

javascript performance jquery native execution-time

14
推荐指数
1
解决办法
1万
查看次数

为什么Object.clone()在Java中是原生的?

clone上方法Object,它创建的对象的精确副本,被声明为:

protected native Object clone() throws CloneNotSupportedException;
Run Code Online (Sandbox Code Playgroud)

为什么native

java clone native object

13
推荐指数
2
解决办法
2573
查看次数