例如,在旧的.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源文件中的本机方法签名中大量使用.
我有一个简单的任务:
有没有可能写一个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:它确实有效!你甚至可以控制编组类型,不可信!
我正在为我的程序编写一个UI,使用opengl和SDL结合使用Lua和C++
我现在需要的是一些库,它允许我调用一个函数,向用户显示用于打开/保存文件的文件选择对话框.但是如果操作系统为这样的对话提供了本机功能,那么我想使用该对话框(例如Window的GetOpenFileName).
我需要支持的唯一平台是Windows和Linux,但我希望能够仍然使用我已编写的大部分SDL和openGL代码.
有哪些选择?
我对Android平台上本机代码的限制有疑问.
基本上我已经开发了一个本机C代码库,它使用UDP套接字进行SIP/RTP,并使用OpenAL进行音频录制/回放 - 基本上是整个应用程序.我们的想法是尽可能使用本机C代码而不是Java代码.我想这样做是因为我将在其他平台上使用它.
我的问题很简单 - 是否可以只使用Java进行GUI,然后使用本机代码进行所有处理?当我的本机代码尝试创建套接字,绑定它,录制音频,播放它等时会发生什么 - 因为它是本机代码,我是否需要为它设置权限(例如应用程序访问麦克风和诸如此类)或将它只是绕过这个东西,因为它的本机代码?原生代码可以像在PC上那样在Android上做任何想做的事吗?
对不起,如果不清楚; 告诉我,我会尽力改进它
谢谢
我正在尝试从命令行运行单元测试.我尝试使用以下命令使用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) 如何获取本机查询(JPA)中某些字段的值?
例如,我想获得客户表的名称和年龄:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
Run Code Online (Sandbox Code Playgroud)
注意:我不想将结果映射到实体.我只是想获得该领域的价值.
谢谢
我用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) 我目前正在开发一种应用程序,它需要记录音频,将其编码为AAC,对其进行流式传输,并在反向中执行相同的操作 - 接收流,解码AAC和播放音频.
我使用MediaRecorder成功录制了AAC(包装在MP4容器中),并使用AudioRecord类成功上传了音频.但是,我需要能够在流式传输时对音频进行编码,但这些类似乎都没有帮助我这样做.
我研究了一下,发现大多数有这个问题的人最终都使用像ffmpeg这样的本地库.
但我想知道,因为Android已经包含StageFright,它具有可以进行编码和解码的本机代码(例如,AAC编码和AAC解码),有没有办法在我的应用程序上使用这些本机代码?我怎样才能做到这一点?
如果我只需要用他们的本机代码实现一些JNI类,那就太好了.另外,因为它是一个Android库,所以不会出现许可问题(如果我错了,请纠正我).
我测量了这两个函数的执行时间:
使用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次执行):
你可以在这个jsFidle上重复测量- 执行需要一些时间,所以请耐心等待.
有没有解释为什么jQuery grep函数比原生 JavaScript 过滤器功能更快?
PS:这个问题的灵感来自于这个答案.
的clone上方法Object,它创建的对象的精确副本,被声明为:
protected native Object clone() throws CloneNotSupportedException;
Run Code Online (Sandbox Code Playgroud)
为什么native?
native ×10
android ×3
android-ndk ×2
c++ ×2
dll ×2
interop ×2
.net ×1
aac ×1
c ×1
c# ×1
clone ×1
delphi ×1
dialog ×1
field ×1
intptr ×1
java ×1
javascript ×1
jpa ×1
jquery ×1
mstest ×1
object ×1
orm ×1
performance ×1
permissions ×1
sensor ×1
stagefright ×1
stream ×1
unit-testing ×1
winapi ×1