0

変更できない C++ で記述された DLL があります。次の公開機能があります

// c++ 
DllExport unsigned int ProcessMessage( char * in_message, USHORT in_message_length, char * connectionString, bool ( SendMessage)( char * connectionString, BYTE * payload, USHORT iPayloadSize )  );

この DLL 関数を呼び出す必要がある Java アプリケーションがあります。現在、Java ライブラリcom.sun.jnaを使用しています。

// Java 
public class main {
    public interface CBlargAPI extends Library {
        interface sendMessage_t extends Callback {
            boolean invoke(String connectionString, Pointer payload, short iPayloadSize );
        }
        int ProcessMessage( byte[] in_message, short in_message_length, String connectionString, sendMessage_t SendMessage ) ; 
    }
    public static void main(String[] args) throws Exception 
    {
        // Override function thingy (#A) 
        CBlarg.sendMessage_t sendMessage_fn  = new CBlarg.sendMessage_t() {
            @Override
            public boolean invoke(String connectionString, Pointer payload, short iPayloadSize) {
                System.out.println("sendMessage_t: " )  ;
                return false; 
                }
            };         
        }
        CBlargAPI.INSTANCE.ProcessMessage( receivePacket.getData(), (short) receivePacket.getLength(), connectionString, sendMessage_fn ); 
    }

    // static member function (#B) 
    public static boolean SendUDPMessage( String connectionString, Pointer payload, short length )  {    
        // ToDo: I want to use this one. 
    }
}

現在、これは で動作していますが、代わりoverride function thingy (#A)に を使用したいと考えています。static member function (#B)私は成功せずにいくつかのことを試しました

// Errors with "cannot find symbol, symbol: class SendUDPMessage, location: class main" 
CBACnetAPI.sendMessage_t sendMessage_fn  = new main.SendUDPMessage();

私は主に C++ プログラマーであり、Java にはほとんど触れません。

私の質問は:

  • SendUDPMessage()の代わりにコールバックとして静的メンバー関数を呼び出すにはどうすればよいOverride function thingy (#A)ですか?
4

1 に答える 1

1

override function thingy (#A)に電話をかける必要がありますstatic member function(#B)。Javaには関数ポインタがないため、その目的を果たすにはインターフェイスオブジェクトが必要です。

なぜあなたは#Aよりも#Bをする必要があるのですか?

于 2012-11-16T12:32:52.017 に答える