Tag: c#

JNI getObjectClass使VM崩溃

我试图做一个事情,C ++通过JNI记录到Java端。 到目前为止,我有一个本地的制定者: public native void setLogger(Logger logger); 我用C ++实现的: void __stdcall Java_setLogger(JNIEnv* env, jobject, jobject loggerInstance) { logger = Logger(env, &loggerInstance); } Logger类的构造函数如下所示: Logger::Logger(JNIEnv* env, jobject* loggerInstance) { this->env = env; this->loggerInstance = *loggerInstance; } 当我尝试通过提供的记录器实例(来自Java)上的JNI调用java方法时,它会使虚拟机崩溃。 我不知道为什么,因为这是从其他stackoverflow问题拼凑在一起。 void Logger::debug(const std::string code, const std::string message) const { std::cout << "debug!" <GetObjectClass(loggerInstance); std::cout << "class retrieved" […]

JNI GetShortArrayElements失败,SIGSEGV SEGV_ACCERR

我在托管代码中创建了一个缓冲区: var nativeBuffer = ShortArray(bufferSize) 这是Kotlin代码,但是根据stdlib文档 ,这个语法实际上是一个返回short []的包装器。 然后我想使用JNI从C ++写入这个缓冲区: JNIEXPORT void JNICALL Java_package_class_name_readNext (JNIEnv * env, jclass clazz, jshortArray javaArray) { jboolean * isCopy; short * targetArray = env->GetShortArrayElements(javaArray, isCopy); // Do stuff to targetArray } 问题是GetShortArrayElements调用总是导致崩溃,并使用以下逻辑删除: 11-07 21:23:53.610 86-86/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** […]

对于使用Kotlin的方法,jmethodID为NULL

即使方法存在,我正在使用本机库,并有以下例外。 我有一个nativeInit函数也被导出到MapController,并按预期工作。 但是,nativeLoadScene方法会导致错误。 JNI DETECTED ERROR IN APPLICATION: jmethodID was NULL in call to CallObjectMethodV from int com.demo.lib.MyController.nativeLoadScene(long, java.lang.String, java.lang.String[]) JNI方法 JNIEXPORT jint JNICALL Java_com_demo_lib_MyController_nativeInit(JNIEnv *jniEnv, jobject obj, jobject tangramInstance, jobject assetManager) { … } JNIEXPORT jint JNICALL Java_com_demo_lib_MyController_nativeLoadScene(JNIEnv* jniEnv, jobject obj, jlong mapPtr, jstring path, jobjectArray updateStrings) { … } com.demo.lib.MyController.kt companion object { […]

如何将const char *转换为Kotlin / Native中的KString?

在C ++文件中,我想将一个const char *转换为KString,这样我就可以使用Kotlin / Native将KString传递给一个Kotlin文件。 我相信答案在于function OBJ_GETTER(utf8ToUtf16, const char* rawString, size_t rawStringLength) 我在KString.cpp中find。 但即使我在Memory.h中发现了使用的定义语句,我还没有设法从我自己的C ++文件中正确地调用函数utf8ToUtf16来获得KString。 任何帮助表示赞赏。

Kotlin / Native – windows上的cinterop

我想在Windows上用cinterop做实验。 但到目前为止,我只find使用mac的kotlin native的教程。 那么,有人知道在哪里可以find在Windows上使用kotlin原生教程吗? 例如,我努力寻找C库所在的默认目录。 如果只是给cinterop一个库的路径,我总是得到一个错误,该文件不是win32可执行文件。 有类似的经验吗?

在android studio中用c ++编写应用程序?

我想知道是否可以在android studio中使用c ++编写应用程序。 我有一些在Java中创建应用程序的知识,但我更喜欢c + +,这是一个复杂的过程?

断言变量不是空的

我有一个类型为DateTime?的变量DateTime? 在一个函数中,我检查它是否为null并希望事后使用它,而不必一直使用它?. 每一个电话。 在例如Kotlin中,IDE识别出这样的检查,并断言该变量之后不能为null 。 有没有办法在C#中做到这一点? DateTime? BFreigabe = getDateTime(); if (BFreigabe == null) return false; TimeSpan span = BFreigabe – DateTime.Now; //Shows Error because it.BFreigabe has the type DateTime?, even though it can't be null 编辑: 使用时 TimeSpan span = BFreigabe.Value – DateTime.Now; 相反,它在这种情况下工作,因为.Value根本没有任何的安全。 然而,考虑到即使没有空检查也会编译,只是产生一个错误,一般的问题仍然存在。 如何说服C#前一个可空变量不能再空? 编辑2 在变量上投射日期时间。 TimeSpan span = (DateTime)BFreigabe – DateTime.Now; […]

在C#中,是否有可能为类型公开其成员类型的接口作为自己的接口

我不确定如何清楚地说出这个问题,所以下面是同一个问题的另外两个版本: 一个结构/类可以通过委托给它的字段/属性来实现一个接口吗? 我可以将由字段/属性类型实现的接口映射到其结构/类吗? 这里是一个代码示例添加伪语法,希望显示我的意思是: public class School : IEnumerable<Student> { private List<Student> students expose IEnumerable<Student>; … } 如果这不是现在可能的话,这有可能吗? …或者这种方法存在一些严重的问题吗? 我认为这可能只是语法糖来摆脱锅炉板代码,否则将功能相同。 例: public class School : IEnumerable<Student> { private List<Student> students; … public IEnumerator<Student> GetEnumerator() { return students.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } 这当然是一个非常人为和最小的例子。 当为它设计界面时,好处会更大,特别是当有很多方法“映射”的时候。 更新:我知道我提供了一个可怕的例子,但我只是想用最简单的例子。 问题的核心不在于具体的情况。 说了这么多,我的例子很糟糕。 所以,为了更好地帮助那些喜欢看到好榜样的人陪伴一个问题,这里有一个更好的例子: public interface IValidPeriod […]

为JVM实现C#

有没有人试图为JVM实现C#? 作为一名Java开发人员,我一直嫉妒C#,但不愿意放弃JVM的可移植性和成熟性,更不用说为它提供各种各样的工具了。 我知道JVM和CLR之间有一些重要的区别,但是有没有什么是最好的?

没有Java的Android Studio

我想使用Android Studio进行C ++ / OpenGL NDK项目,但是我不希望在我的电脑上安装Oracle的Java,因为这是一个安全风险。 反正有没有安装Java使用这个IDE?