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


Anmelden zum Antworten