Hello, Win32 API(CNI) World!
Posted on 3月 26th, 2013 by cx20
Win32 API(CNI)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は、GCJ にて CNI を利用した Win32 API の呼出し例となっている。
ソースコード(Java)
public class Hello {
public static native int messageBox( int hwnd, String text, String caption, int type );
public static void main( String[] args ) {
messageBox( 0, "Hello, Win32 API World! |
クラスファイル作成
C++ ヘッダファイル作成
ソースコード(C++ ヘッダファイル)
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
#ifndef __Hello__
#define __Hello__
#pragma interface
#include <java/lang/Object.h>
#include <gcj/array.h>
extern "Java"
{
class Hello;
}
class Hello : public ::java::lang::Object
{
public:
Hello();
static jint messageBox(jint, ::java::lang::String *, ::java::lang::String *, jint);
static void main(JArray< ::java::lang::String * > *);
static ::java::lang::Class class$;
};
#endif // __Hello__ |
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
#ifndef __Hello__
#define __Hello__
#pragma interface
#include <java/lang/Object.h>
#include <gcj/array.h>
extern "Java"
{
class Hello;
}
class Hello : public ::java::lang::Object
{
public:
Hello();
static jint messageBox(jint, ::java::lang::String *, ::java::lang::String *, jint);
static void main(JArray< ::java::lang::String * > *);
static ::java::lang::Class class$;
};
#endif // __Hello__
ソースコード(C++ 実装ファイル)
#include <gcj/cni.h>
#include <windows.h>
#include "Hello.h"
jint Hello::messageBox(jint hwnd, ::java::lang::String* text, ::java::lang::String* caption, jint type)
{
jchar* _text = JvGetStringChars( text );
jchar* _caption = JvGetStringChars( caption );
int result = MessageBoxW( (HWND)hwnd, (LPCWSTR)_text, (LPCWSTR)_caption, (UINT)type );
return result;
} |
#include <gcj/cni.h>
#include <windows.h>
#include "Hello.h"
jint Hello::messageBox(jint hwnd, ::java::lang::String* text, ::java::lang::String* caption, jint type)
{
jchar* _text = JvGetStringChars( text );
jchar* _caption = JvGetStringChars( caption );
int result = MessageBoxW( (HWND)hwnd, (LPCWSTR)_text, (LPCWSTR)_caption, (UINT)type );
return result;
}
コンパイル方法
C:¥> gcj -c Hello.cpp
C:¥> gcj --main=Hello -o Hello Hello.o Hello.class |
C:¥> gcj -c Hello.cpp
C:¥> gcj --main=Hello -o Hello Hello.o Hello.class
実行結果
---------------------------
Hello, World!
---------------------------
Hello, Win32 API World!
---------------------------
OK
--------------------------- |
---------------------------
Hello, World!
---------------------------
Hello, Win32 API World!
---------------------------
OK
---------------------------
Tags: Win32 API
Categories: CNI, GCJ, Win32 API