install "Compiled Native Interface" with Viusl Studio 2010 on Windows 7
-
hallo,
vorher habe ich versucht ein ssl socket in c++ zu kompilieren, was mir aber nicht gelungen, ist da ich in c++ nicht so erfahren bin.
jetzt habe ich den http://en.wikipedia.org/wiki/Compiled_Native_Interface unter http://gcc.gnu.org/java entdeckt.
den code habe ich schon fertig :
// java.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung. // #include "stdafx.h" #include "java.h" #include <javax/net/ssl/SSLServerSocket.h> #include <javax/net/ssl/SSLServerSocketFactory.h> #include <javax/net/ssl/SSLSocket.h> #include <java/io/BufferedReader.h> #include <java/io/InputStream.h> #include <java/io/InputStreamReader.h> #include <java/lang/String.h> #include <java/lang/System.h> static javax::net::ssl::SSLServerSocket *sslss; static javax::net::ssl::SSLServerSocketFactory *sslssf; static javax::net::ssl::SSLSocket *sss; static java::io::BufferedReader *br; static java::io::InputStream *is; static java::io::InputStreamReader *isr; // Dies ist das Beispiel einer exportierten Variable. JAVA_API int njava=0; // Dies ist das Beispiel einer exportierten Funktion. JAVA_API const char* fnjava(java::lang::String* pass1, java::lang::String* pass2,java::lang::String* file1, java::lang::String* file2) { if(br==NULL) { neu(pass1,pass2,file1,file2); return (const char*)br->readLine(); } else { return (const char*)br->readLine(); } } // Dies ist der Konstruktor einer Klasse, die exportiert wurde. // Siehe java.h für die Klassendefinition. Cjava::Cjava() { return; } void neu(java::lang::String* pass1, java::lang::String* pass2,java::lang::String* file1, java::lang::String* file2) { java::lang::System::setProperty(pass1,pass2); java::lang::System::setProperty(file1,file2); sslssf=(javax::net::ssl::SSLServerSocketFactory*)javax::net::ServerSocketFactory::getDefault(); sslss = sslssf->createServerSocket(443); sss =(javax::net::ssl::SSLSocket*)sslss->accept(); is = sss->getInputStream(); isr= new java::io::InputStreamReader(is); br= new java::io::BufferedReader(isr); }
aber ich bekomme jedesmal fehlermeldungen wenn ich das programm ausführe :
1>------ Erstellen gestartet: Projekt: java, Konfiguration: Debug Win32 ------
1> stdafx.cpp
1> dllmain.cpp
1> java.cpp
1>d:\mingw\gcc-4.5.1\libjava\javax\net\ssl\sslserversocket.h(7): warning C4068: Unbekanntes Pragma
1>d:\mingw\gcc-4.5.1\libjava\java\net\serversocket.h(7): warning C4068: Unbekanntes Pragma
1>d:\mingw\gcc-4.5.1\libjava\java\lang\object.h(14): warning C4068: Unbekanntes Pragma
1>d:\mingw\gcc-4.5.1\libjava\gcj\javaprims.h(17): warning C4068: Unbekanntes Pragma
1>d:\mingw\gcc-4.5.1\libjava\gcj\javaprims.h(19): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "gcj/libgcj-config.h": No such file or directory
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Ich habe mir das gcc Paket heruntergeladen, entpackt und als inclueverzeichniss angegeben.
ich musste noch vom originalhandbuch abweichen und schreiben :
#include <java/lang/String.h>
anstatt
#include <java/lang/String>was mir schon komisch vorkam. Ich denke mal ich muss dieses CN-Interface noch irgendwie installieren, aber wie?
cygwin und mingw habe ich schon installiert, weiss aber nicht damit umzugehen.
weiss jemand welche schritte ich durchführen muss damit der java code in c++ kompiliert werden kann, bin in der sache nicht erfahren, plz help
-
der fehler
1>d:\mingw\gcc-4.5.1\libjava\javax\net\ssl\sslserversocket.h(7): warning C4068: Unbekanntes Pragma
findet sich hier :
[cpp]
// DO NOT EDIT THIS FILE - it is machine generated -- c++ --#ifndef __javax_net_ssl_SSLServerSocket__
#define __javax_net_ssl_SSLServerSocket__#pragma interface
#include <java/net/ServerSocket.h>
#include <gcj/array.h>extern "Java" // Error : Unbekannte externe Verknüpfungsspezifikation
{
namespace java
{
namespace net
{
class InetAddress;
}
}
namespace javax
{
namespace net
{
namespace ssl
{
class SSLServerSocket;
}
}
}
}class javax::net::ssl::SSLServerSocket : public ::java::net::ServerSocket
{public: // actually protected
SSLServerSocket();
SSLServerSocket(jint);
SSLServerSocket(jint, jint);
SSLServerSocket(jint, jint, ::java::net::InetAddress *);
public:
virtual JArray< ::java::lang::String * > * getEnabledCipherSuites() = 0;
virtual void setEnabledCipherSuites(JArray< ::java::lang::String * >= 0;
virtual JArray< ::java::lang::String * > * getEnabledProtocols() = 0;
virtual void setEnabledProtocols(JArray< ::java::lang::String * >= 0;
virtual jboolean getEnableSessionCreation() = 0;
virtual void setEnableSessionCreation(jboolean) = 0;
virtual jboolean getNeedClientAuth() = 0;
virtual void setNeedClientAuth(jboolean) = 0;
virtual jboolean getUseClientMode() = 0;
virtual void setUseClientMode(jboolean) = 0;
virtual jboolean getWantClientAuth() = 0;
virtual void setWantClientAuth(jboolean) = 0;
virtual JArray< ::java::lang::String * > * getSupportedCipherSuites() = 0;
virtual JArray< ::java::lang::String * > * getSupportedProtocols() = 0;
static ::java::lang::Class class$;
};#endif // __javax_net_ssl_SSLServerSocket__
[/cpp]als ein beispiel