前几天我问过这个问题,但并不是很具体,所以我想重新澄清一下。
我正在创建一个Android应用程序,它使用使用NDK的C语言中的现有库。我遇到的问题是C代码使用了很多java没有使用的东西(函数指针作为参数是一个大问题)。
无论如何,我想知道是否可以用我的Java代码编写C代码调用的函数。现在据我所知,你可以做到这一点,所以如果没有人回答‘是的,你可以,链接’,我将非常感激。我一直在研究它,但实际上需要做什么是我无法理解的。
有人能试着解释一下这个过程吗?我知道这涉及到在C代码中创建一个JVM;任何帮助新手站稳脚跟的信息都将不胜感激。
谢谢
编辑:
所以,我不知道这三个步骤该怎么做。
To c
以下情况:
class Main{
void MainMethod(){
C * c;
B * b = new B();
b->fillC(c);
}
};
class B{
void fillC(C* c){
c = new C();
}
};
class C{
};
在我的软件中,我遇到了这种情况。在程序的末尾,类Main的c仍然是空的。为什么会这样呢?
我是C中的新手,我正在创建一个程序,它将从命令行读取输入参数,然后进行比较,但是当我试图编译代码时,我得到的是错误"warning: initialization makes integer from pointer without a cast"。
对于此错误,我在堆栈溢出上找到了许多示例,但我无法将问题关联到代码中。下面是示例代码:
void validateGuess(int guess) {
if (guess < 555) {
printf("Your guess is too low.");
} else if
我正在制作一个到DLL库的接口,这样我就可以在Java中使用它。我需要本机函数来修改jlong参数的值。就像参数是通过引用传递的。我的Java方法必须具有与如下所示的本机函数MPUSBWrite完全相同的参数。
实际无法工作的代码示例: MPUSBWrite获取其第4个参数作为参考,并修改ITRS值。当我读取pLength传递的变量时,我总是得到0。
Java:
public static native boolean Write(long handle, byte[] pData, int dwLen, long pLength, int dwMilliseconds);
原生C++:
JN
下面是代码:
#include<iostream>
using namespace std;
typedef struct ptrs
{
int (*addptr)(int a, int b);
}mems;
int add(int a, int b)
{
int result = a+b;
return result;
}
int main()
{
mems ptrtest;
ptrtest.addptr = &add;
int c = (*ptrtest.addptr)(3,4);
//int c = ptrt
我不得不编写一个C程序,它有600多行代码和大约25个函数。这是我编写的最长的C代码。
我注意到其中一些函数有5个以上的参数。直接从main()调用的对象有更多的参数。它离main()越远,就越少。
我还注意到,我经常不得不将参数传递给函数,并不是因为该函数直接使用该参数,而是该函数调用了另一个需要该参数的函数。
所以看起来就像
void f1(int a, int b,..., int bar){
int foo = f2(bar); // the only time 'bar' is used in f1
.
.
.
}
我试图最小化全局变量
我正在为一种"c-like"语言编写编译器。目前,编译器支持局部作用域中的数组。可以使用括号表示法-a[0], a[1],...来访问数组的每个元素。为了支持这种数据结构,使用符号表来跟踪当前作用域中的符号以及下一个可用内存空间的地址。为了进行演示,请考虑以下代码:
int a[5]; int b;
使用堆栈实现,并给出一个4字节对齐的内存:为了访问,例如元素a[1],我计算内存位置为
element = ((index+1) * 4) + a.Address; // a.Address is the address of a, which is stored in the s