Hi Leute, helft einem blutigen C Anfänger
ich habe folgendes Programm, welches ein AudioFile abspielen soll
C
- //File: WAVPlayer.c
- #include <jni.h>
- #include "sound_WAVPlayer.h"
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include <windows.h>
- static jmethodID String_getBytes_ID;
- static jclass classString;
- static char* getJavaString(JNIEnv* env, jstring jstr);
- /**
- * Plays the audio file at the provided url
- *
- * @param env System provided environment pointer
- * @param obj System provided Java Object
- * @param jstr Java String containing the url to the sound file
- */
- JNIEXPORT void JNICALL Java_sound_WAVPlayer_playSound
- (JNIEnv *env, jobject obj, jstring jstr)
- {
- char* url = getJavaString(env, jstr);
- PlaySound(_T(url), NULL, SND_ASYNC | SND_FILENAME);
- return;
- }
- /**
- * Translates a Java string to a C string using the String.getBytes
- * method, which uses default local encoding.
- *
- * @param env System provided environment pointer.
- * @param jstr Java string to be converted.
- *
- * @return Converted C string.
- */
- static char* getJavaString(JNIEnv *env, jstring jstr) {
- jbyteArray hab = 0;
- jthrowable exc;
- char *result = 0;
- classString = (*env)->FindClass(env, "java/lang/String");
- if(classString == NULL) return 0;
- classString = (*env)->NewGlobalRef(env, classString);
- if(classString == NULL) return 0;
- String_getBytes_ID = (*env)->GetMethodID(env, classString, "getBytes", "()[B");
- if(String_getBytes_ID == NULL) return 0;
- hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID);
- exc = (*env)->ExceptionOccurred(env);
- if(!exc) {
- jint len = (*env)->GetArrayLength(env, hab);
- result = (char*)malloc(len + 1);
- if(result == 0) {
- //bobc throwByName(env, "java/lang/OutOfMemoryError", 0);
- (*env)->DeleteLocalRef(env, hab);
- return 0;
- }
- (*env)->GetByteArrayRegion(env, hab, 0, len, (jbyte*)result);
- result[len] = 0; /* NULL-terminate */
- }
- else {
- (*env)->DeleteLocalRef(env, exc);
- }
- (*env)->DeleteLocalRef(env, hab);
- return result;
- }
Ich erhalte folgende Fehlermeldung:
Code
- Compiling...
- WAVPlayer.c
- d:\eigene dateien\unizh\diplomarbeit\workspace\wavplayer\src\wavplayer.c(24) : error C2065: 'Lurl' : undeclared identifier
- d:\eigene dateien\unizh\diplomarbeit\workspace\wavplayer\src\wavplayer.c(24) : warning C4047: 'function' : 'const unsigned short *' differs in levels of indirection from 'int '
- d:\eigene dateien\unizh\diplomarbeit\workspace\wavplayer\src\wavplayer.c(24) : warning C4024: 'PlaySoundW' : different types for formal and actual parameter 1
Das bedeutet der Parameter url ist nicht mit dem verlangten Datentyp von PlaySound kompatibel, right?
Original sieht der Methodenaufruf so aus:
wie zum Kuckuck muss ich die Datentypen konvertieren?
und warum kann das nicht so übersichtlich sein wie in java?