草庐IT

NON_NATIVE

全部标签

java - JNI : Overhead of holding Java object references within the native code?

我正在研究通过JNI将JRE集成到C++应用程序中。在C++应用程序中持有对Java对象的大量引用(JNI术语中的全局引用)的开销是多少?使用这种方法我应该注意什么问题(除了显而易见的问题,例如手动取消分配引用)吗? 最佳答案 (a)开销与从Java执行时一样。您正在阻止对象被垃圾收集。(b)在JNI调用中持有对象引用对JVM来说可能是致命的,除非你做得正确。您需要仔细阅读JNI规范中有关全局和本地引用的部分。您还需要考虑使用弱引用而不是全局引用。 关于java-JNI:Overhead

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

将非const指针转换为const指针是合法的。那为什么将指向非const的指针转换为指向const的指针是不合法的呢?例如,为什么下面的代码是非法的:char*s1=0;constchar*s2=s1;//OK...char*a[MAX];//akachar**constchar**ps=a;//error! 最佳答案 来自标准:constcharc='c';char*pc;constchar**pcc=&pc;//notallowed*pcc=&c;*pc='C';//wouldallowtomodifyaconstobject

c# - 未导出成员函数时从 C# 调用 C++ native /非托管成员函数

我有一个非托管DLL,它仅导出一个C样式的工厂方法,该方法返回一个类的新实例(此处进行了简化以使其看起来简单)。你好.h#ifdefined(HWLIBRARY_EXPORT)//insideDLL#defineHWAPI__declspec(dllexport)#else//outsideDLL#defineHWAPI__declspec(dllimport)#endifstructHelloWorld{public:virtualvoidsayHello()=0;virtualvoidrelease()=0;};extern"C"HWAPIHelloWorld*GetHW();你好

c++ - 将 Gravity(一种脚本语言)调用转换为 native C 函数调用

我目前正在研究实现一种更简洁的方法来从Gravity调用nativeC函数脚本语言。到目前为止,最简单的例子是这个:intadd(intlhs,intrhs){returnlhs+rhs;}staticvoidgravity_wrap_add(gravity_vm*vm,gravity_value_t*args,uint32_tnargs,uint32_tretIndex,void*data){intlhs,rhs,rt;//Unwraplhs=VALUE_AS_INT(args[1]);rhs=VALUE_AS_INT(args[2]);//Performcall,capturere

c++ - boost multi_index : retrieve unique values of a non-unique key

我有一个boost::multi_index_container其元素是这样的结构:structElem{Aa;Bb;Cc;};主键(在数据库意义上)是a和b的composite_key。其他键的存在是为了执行各种类型的查询。我现在需要检索一组c的所有不同值。这些值是无论如何不是唯一的,而是遍历所有条目(尽管是有序的),或者使用std::unique似乎很浪费,考虑到c的不同值的数量预计将我是否缺少更有效地获得此结果的简单方法? 最佳答案 我搜索了Boost.MultiIndex文档,但似乎无法找到一种方法来执行您想要的操作。我很想

.net - 由于 2 秒超时,并非所有 native 全局变量都在混合模式 .Net 应用程序中被破坏

在我的混合模式C++应用程序中,我注意到以下奇怪的效果:如果我在VisualStudio外部启动可执行文件,所有非托管全局变量都会被正确销毁。如果我在VisualStudio外部启动可执行文件,然后附加调试器,所有非托管全局变量都会被正确销毁。我在VisualStudio调试器中启动可执行文件,似乎并非所有非托管全局变量都被破坏。我读到.Net有2秒的清理超时。这是针对整个非托管全局变量销毁吗?或者这是每个析构函数?我很确定这2秒超时是原因,因为当我在doexit方法的开头设置断点时,调试器会在应用程序退出时停在那里。但是,如果我在doexit函数末尾附近设置断点,则永远不会命中该断点

来自 native C++ 加载的 DLL 的 C# 形式

这个问题来自这个线程:NativeC++useC#dllviaproxyC++manageddll简而言之,我正在通过DLL将(我的)C#扩展加载到native进程中。扩展需要显示一个表单,以便用户可以控制它。我使用的是标准.NET表单,没有第3方库或任何东西,而且我的表单没有显示。更糟糕的是,它会挂起目标进程。它没有使用任何CPU,所以我感觉它在等待某个函数返回,但从未这样做过。同样有趣的是弹出了“Initializemethod”消息框,但没有弹出“Test”消息框。我已经测试了所有我能想到的东西(STAthread、线程、DisableThreadLibraryCalls,以及不

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

据我了解,以下内容对boost::shared_ptr有效:boost::shared_ptrptr;...boost::shared_ptrc_ptr=ptr;//Valid相同的行为不适用于boost::interprocess::managed_shared_ptr。为什么? 最佳答案 boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个辅助类,您可以使用它来定义一个类的类型。来自interprocessdocs:typedefmanaged_shared_ptr::ty

c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread

我正在将之前围绕pthreads的线程包装器转换为std::thread。但是c++11没有办法取消线程。尽管如此,我还是需要取消线程,因为它们可能正在外部库中执行非常冗长的任务。我正在考虑在我的平台中使用给我pthread_id的native_handle。我在Linux(Ubuntu12.10)中使用gcc4.7。这个想法是:#include#include#includeusingnamespacestd;intmain(intargc,char**argv){cout线程被pthreads抛出的异常取消。我的问题是:这种做法会不会有什么问题(除了不可移植)?

c++ - 我们从哪里获得 javacv 的 native 库 .so 文件?

所以我在运行一些javaCV代码时遇到了问题,虽然我已经在网上看到了很多针对它的修复,但没有一个有效。确切的错误是java.lang.UnsatisfiedLinkError:/tmp/javacpp/libjniopencv_core.socannotopensharedobjectfile:nosuchfileordirectory我查看了/usr/local/lib(它应该查看的位置),我在该目录中有一堆共享对象,例如libopencv_core.so.2.4。不过,它们的名称中都没有jni。这让我觉得我错过了一步。opencvjniso文件应该来自哪里?如果重要的话,我会在Ra