CD-Rom Laufwerke auswerfen
-
Hallo...
Ich will mir grade eine Sammlung von API Calls unter Windows schreiben, die ich per JNI unter Java nutzen kann.
Dabei meckert aber hier schon der Borland Compiler. Ich weiß aber absolut nicht warum!#include <jni.h> #include <windows.h> #include "win.h" void openclosecd (char szDrive[], bool open) { MCI_OPEN_PARMS op; MCI_STATUS_PARMS sp; DWORD dwFlags; ZeroMemory(&op, sizeof(MCI_OPEN_PARMS)); op.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO; op.lpstrElementName = szDrive; dwFlags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE; if(!mciSendCommand(0, MCI_OPEN, dwFlags, (unsigned long)&op)) { sp.dwItem = MCI_STATUS_READY; if(open) mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN, 0); else mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED, 0); mciSendCommand(op.wDeviceID, MCI_CLOSE, MCI_WAIT, 0); } } JNIEXPORT void JNICALL Java_WinAPI_opencd (JNIEnv *env, jobject obj) { for(int i = 0; i < 26; i++) if(GetDriveType((i + 'A') + "://") == DRIVE_CDROM) openclosecd((i + 'A') + "://", true); } JNIEXPORT void JNICALL Java_WinAPI_closecd (JNIEnv *env, jobject obj) { for(int i = 0; i < 26; i++) if(GetDriveType((i + 'A') + "://") == DRIVE_CDROM) openclosecd((i + 'A') + "://", false); }Er sagt mir immer
Fehler E2303 win.c 5: Typname erwartetAber ich kenn die Deklaration von Funktionen unter C nur so, wie oben angegeben...
-
Was ist win.h? Probier mal BOOL statt bool
-
ddfdf schrieb:
Was ist win.h? Probier mal BOOL statt bool
Der Unterschied zwischen BOOL (int) und bool (bool) sollte hier eingelt. nicht relevant sein...

-
Hi CodeFinder
also im informatik unterricht haben wir gelernt dass bool nur 4 bits hat während BOOL 8 bits hat. Mein Info Lehrer meint dass viele Kompiler damit Probleme haben.
-
Wenn du uns auch noch sagst, auf welche Zeile im Code sich der Fehler bezieht, müssen wir nicht mehr rätseln.
-
Hoi,
Wie gesagt...BOOL ist als int(eger) definiert...
sizeof(int) = 4 Bytes
sizeof(bool) = 1 Bytes
...Unter MV C++ 6.0ddfd schrieb:
also im informatik unterricht haben wir gelernt dass bool nur 4 bits hat während BOOL 8 bits hat.
Da ein Byte aus 8 Bits besteht hat demnach:
BOOL: 4 * 8 Bits = 32 Bits
bool: 1 * 8 Bits = 8 BitsAber warum sollte ein Compiler deshalb Probleme haben ?
PS: Int kann auf manchem Compilern jedoch auch nur 2 Bytes belegen...sollte aber dennoch kein problem darstellen

-
WebFritzi schrieb:
Wenn du uns auch noch sagst, auf welche Zeile im Code sich der Fehler bezieht, müssen wir nicht mehr rätseln.
Sinnvoll ...^^
-
Hallo,
Also in der win.h steht nur der automatisch erzeugte Code von dem programm javah, was mir aus ner Klasse die nativen methodenaufrufe raussucht und die Funktionsdeklarationen dazu erzeugt:/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class WinAPI */ #ifndef _Included_WinAPI #define _Included_WinAPI #ifdef __cplusplus extern "C" { #endif /* * Class: WinAPI * Method: opencd * Signature: ()V */ JNIEXPORT void JNICALL Java_WinAPI_opencd (JNIEnv *, jobject); /* * Class: WinAPI * Method: closecd * Signature: ()V */ JNIEXPORT void JNICALL Java_WinAPI_closecd (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endifIch muss da ja nicht noch die openclosecd-Funktion einfügen oder ist das beim borland Compiler Pflicht?
Ich hab bisher nur mit dem gcc gearbeitet...Der Fehler befindet sich in Zeile 5. Also direkt die erste Codezeile.
-
Den Titel "CD-Rom Laufwerke auswerfen" find ich wirklich sehr gelungen. Raus mit dem alten Kram aus meinem Rechner!

-
-
@JOchen: Soweit ich das jetzt überblickt habe, geht es nicht darum...
-
Ich wollte trotzdem noch darauf aufmerksam machen, dass mciXxx IMHO nicht die beste Lösung ist, sondern über DeviceIoControl...