草庐IT

native-methods

全部标签

c++ - 托管 C++ dll 的加载程序锁定错误,静态链接到 native C++ 库

我有一个托管的c++dll,其中包含几个托管类,这些托管类依次调用库中的nativec++代码,我已静态链接到该dll。但是,如果我尝试在dll上运行RegAsm.exe,该工具会正确报告“我们没有注册任何类型”,但随后挂起。我很确定这是loaderlock问题,当RegAsm尝试加载它时我的dll挂起。我使用的是VisualStudio2008速成版。让我感到困惑的是,将native代码放入dll时一切正常,但从库中静态链接时却不行。我知道这篇文章类似于thisquestion但我的dll中没有没有DllMain,因此我没有从DllMain运行MSIL代码的风险。此外,遵循对单个文件

c++ - 在自定义 const native C++ 容器类上支持 "for each"

我想实现一个简单的nativeC++固定容量数组模板类,为了方便起见支持基于范围的“foreach”语法,开销最小。我在const实例上支持它时遇到问题。有了这个实现:templateclassList{public:List(){mSize=0;}constT*begin()const{returnmItems;}constT*end()const{returnmItems+mSize;}T*begin(){returnmItems;}T*end(){returnmItems+mSize;}private:size_tmSize;TmItems[Capacity];};和这种用法:c

c++ - Android 调试 native 代码

我正在使用ndk-r9,我正在努力让ndk-gdb为我工作。我已经启动了一个名为“LittlestAndroid”的小型Android应用程序,它对返回硬编码字符串的nativeC++方法进行了简单调用。该应用程序构建/安装/运行得很好。现在我正在重新调整应用程序的用途以了解ndk-gdb。我在list中设置了debuggable="true"。我在我的make中设置了这些环境变量:APP_OPTIM=debugLOCAL_CFLAGS:=-g我已经破解了$NDK_HOME/build/core/build-binary.mk文件,使用以下命令有条件地去除调试符号:$(LOCAL_IN

java - JNI : Invoke JAVA method from C++, 返回对象、引用和 GC

当C++程序(!)调用返回对象的java方法时,规则是什么?是否有对该对象的突出引用?我必须调用“DeleteLocalRef”来确保该对象是GCd,还是会自动成为GCd?我不清楚的原因是,在所有示例和官方文档中,声明“DeleteLocalRef”不是必需的,只有当从java调用native“C/C++”方法时,它对我才有意义。但是如果调用线程是调用java的C++方法,JVM怎么知道这个对象可以GCd呢?同理:如果我想缓存对象,我必须调用“NewGlobalRef”吗?找不到对此的任何引用...感谢任何引用和/或澄清 最佳答案

c++ - 使用 C++ 和 SQL Native Client 的 SQLGetData 问题

我有一个使用SQLNativeClient连接到MSSQLServer2000的C++应用程序。我正在尝试从包含比最初分配给它的缓冲区提供的数据更多的数据的TEXT列中检索结果。为了澄清我的问题,我将概述我在做什么(下面的代码):分配1024字节缓冲区使用使用SQLBindColumn将缓冲区绑定(bind)到列使用SQLExecute执行SELECT查询使用SQLFetch遍历结果SQLFetch无法将整个结果返回到我的缓冲区:我想使用SQLGetData检索整个列值上述操作顺序存在一个问题:SQLGetData对我的驱动程序中的绑定(bind)列不起作用。一个可行的解决方案是使用S

java - JNI 从 native 代码调用 JVM 函数/事件?

我想知道native函数是否有可能向Java函数/事件发出信号?基本上我想我会在一个单独的线程上运行一些C++代码并做一些事情,比如处理SIP,然后如果native线程检测到一个传入调用,则能够以某种方式向JVM发出信号。我不确定在JNI中如何进行这样的通信。有什么想法吗? 最佳答案 周围有几篇好文章,例如thisone.这是一个DeveloperWorks文章看起来也不错。 关于java-JNI从native代码调用JVM函数/事件?,我们在StackOverflow上找到一个类似的问

c++ - Matlab Engine 命令窗口中的 "??? Undefined function or method"

我正在使用VisualStudio编写C++代码,并将一些变量发送到MATLAB引擎。到目前为止没有问题。假设我打开了MATLAB命令窗口并且这些变量:»whosNameSizeBytesClassAttributesQWe1x3652920doubleQWp1x3642912doubleQWu1x3642912double我可以使用标准的MATLAB函数,但我下载了一个新的function.m(设置路径后它在MATLAB中正常工作),MATLAB引擎的命令窗口无法识别或找到它。»isnormq(Q)???Undefinedfunctionormethod'isnormq'我以为它们(

C++ : How can I calculate a cost of a method (Algorithm Analysis)

我是C++初学者,正在学习算法分析:我正在编写一个方法,该方法返回一个二维数组的行号最多为1,输入数组中的每一行都已排序,并且当所有1都排序到前面时命中0,如1,1,1,0,01,1,0,0,01,1,1,1,01,0,0,0,01,1,1,1,1该方法将从该数组返回5,代码如下:intcountone(inta[][]){intcount=0,column=0,row=0,current=0,max;boolend=true;do{if(a[row][column]==1){current++;column++;}if(a[row][column]==0){column=0;if(c

c++ - 如何在 native Node 模块中维护零拷贝?

我正在为具有零拷贝数据查找功能的进程内数据库编写nativeNode模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我想将数据传递给V8,而不需要复制内存或解析某些东西。我该怎么做?到目前为止,我所看到的所有方法都涉及在JSON之间来回解析(在这种情况下非常浪费资源)或实例化V8数据结构并将数据复制到其中。注意:如果您想知道,零复制数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。 最佳答案 我想我找到了解决方案,尽管它相当有限。可以在此处找到有趣的文档:https://developers.go

python - Cython 扩展类 : How do I expose methods in the auto-generated C struct?

我现有的C++代码定义了一些我需要使用的类,但我需要能够将这些类发送到Python代码。具体来说,我需要在C++中创建类实例,创建Python对象作为这些C++对象的包装器,然后将这些Python对象传递给Python代码进行处理。这只是一个更大的C++程序的一部分,因此最终需要使用C/PythonAPI在C++中完成。为了让我的生活更轻松,我使用Cython定义扩展类(cdef类)作为我的C++对象的Python包装器。我使用的是典型格式,其中cdef类包含指向C++类的指针,然后在创建cdef类实例时对其进行初始化。因为如果我有一个现有的C++对象要包装,我也希望能够替换指针,所以