RSS2.0 hr
カテゴリ
 連絡事項 (12)
 開発全般 未分類 (2)
 WEB開発 未分類 (1)
 C# (1)
 Java (2)
 PHP (1)
 Flash (1)
 WPF, Silverlight (6)
 Android (2)
 MySQL (1)
 ニコ窓 (66)
 Nico Rec Ctrlr (4)
 Live Seeker (8)
 Live Seeker Lite (4)
 Nico2ls (1)
 未完成ツール (7)
 TinyMCE (4)
 FFmpeg (6)
 Linux (1)
 PCパーツ関連 (1)
 掲載誌 (3)
コンテンツ一覧
最新コメント
返信がおそくなってしまい...
mottaさん 03/26 13:38
こんにちは。開発終了は残...
名無しさん 03/08 17:47
お役に立ててよかったです...
mottaさん 12/05 20:46
参考になりましたm(,_...
名無しさん 12/04 10:21
コメントありがとうござい...
mottaさん 10/21 22:42
公開ツール
ニコ窓
ニコニコ生放送用
ブラウザ
ニコ窓
コンテンツ
P. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 List
■ ニコ窓 Ver1.037 公開 - 2010/03/12 23:05:00

ニコ窓 Ver1.037』を公開しました。

■ 対応内容

・ツールのヘルプのURLを新サイト(http://motta.toypark.in/)へ変更。

■ ダウンロード

最新版のダウンロード、ツールの詳細は、以下のページを参照して下さい。
アップデートの場合は、アーカイブに同梱した[アップデート方法.txt]をご覧下さい。

ニコ窓のページへ

[ニコ窓]

ニコ窓
カテゴリ: ニコ窓  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
■ Live Seeker Lite Ver1.005 公開 - 2010/03/12 23:00:00

Live Seeker Lite Ver1.005』を公開しました。

■ 対応内容

・ツールのヘルプのURLを新サイト(http://motta.toypark.in/)へ変更。

■ ダウンロード

最新版のダウンロード、ツールの詳細は、以下のページを参照して下さい。
アップデートの場合は、アーカイブに同梱した[アップデート方法.txt]をご覧下さい。

Live Seeker Liteのページへ

[Live Seeker Lite]

Live Seeker Lite
カテゴリ: Live Seeker Lite  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
■ 仮運用開始 - 2010/03/11 22:00:00

前サイトから記事の移行が完了したため、仮運用を開始しました。
その他の記事については、今後、移行する予定です。

■ ツールのダウンロード先について

ツールのZIPファイルを Vector 内のWEBスペースに置いているため、Vector(hp.vector.co.jp) からのダウンロードになります。
実際には、IE等の「ファイルのダウンロード」メッセージボックスで、発信元が "hp.vector.co.jp" と表示される程度で、通常は、特に気にする必要はありません。

カテゴリ: 連絡事項  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
■ Javaからネイティブコードの呼び出し(JNI) - 2010/03/10 23:00:00

Javaからネイティブコード(C言語、C++等)の関数を呼ぶ場合、JNI(Java Native Interface)を使う方法があります。

今回は、JNIを使って、C++で書かれた関数を呼んでみます。
具体的には、Javaでクラス、C++でDLLを生成して、Javaのクラスから、DLLを呼ぶことになります。
Javaでは、ネイティブコードの関数と同様の型のネイティブメソッドを宣言します。
このネイティブメソッドを宣言すると、ネイティブコードの関数を、通常のメソッドのように、Javaから呼び出せるようになります。

開発環境と主な手順は、以下のようになります。

▽ 開発環境

OS: WindowsXP Professional
Javaコンパイラ: Java SE Development Kit 5.0 Update 8
Cコンパイラ: Visual C++ 2005 Express Edition

▽ 主な手順

① Javaコードを書く(JniTest.java)。
② ①のコード(JniTest.java)をコンパイルし、クラスを生成する(JniTest.class)。
更に、C++用のヘッダーファイルを生成する(JniTest.h)。
③ ヘッダーファイル(JniTest.h)を使って、C++のコードを書く(JniTestLib.cpp)。
④ ③のコードをコンパイルし、DLLを生成する(JniTestLib.dll)。
⑤ ②のJavaのクラス(JniTest.class)を実行し、DLL(JniTestLib.dll)のネイティブメソッドを呼ぶ。

◆ 開発

① Javaコードを書く(JniTest.java)。

ネイティブメソッド(TestMethod)の宣言と、Java側の処理を実装します。
サンプルでは、ネイティブメソッドしか呼んでいません。

[ JniTest.java ]

public class JniTest
{
    static
    {
        // ライブラリ(DLL)のロード
        System.loadLibrary("JniTestLib");
    }

    // ネイティブメソッドの宣言
    public native String TestMethod();

    public static void main(String[] args)
    {
        JniTest jt = new JniTest();

        // ネイティブメソッドを呼ぶ
        System.out.println(jt.TestMethod());
     }
}

② ①のコード(JniTest.java)をコンパイルし、クラス(JavaTest.class)を生成する。
更に、C++用のヘッダーファイル(JniTest.h)を生成する。

▽ クラス(JavaTest.class)の生成

コマンドプロンプトから、javac.exe でコンパイルします。

javacでコンパイル

▽ C++用のヘッダーファイル(JniTest.h)の生成

ヘッダーの生成には、javah.exe を使い、引数には、JniTest(.class)を指定します。

javahでヘッダーの生成

以下のような内容のヘッダーが生成されます。
"JNICALL Java_JniTest_TestMethod"メソッドが、C++のDLLで実装するネイティブメソッドになります。

[ JniTest.h ]

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 

/* Header for class JniTest */
#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif

/*
 * Class:     JniTest
 * Method:    TestMethod
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_JniTest_TestMethod
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

③ ②のヘッダーファイル(JniTest.h)を使って、C++のコード(JniTestLib.cpp)を書く。

ここからは、Visual C++ 2005 を使います。

▽ 空のプロジェクトの作成

Visual C++ 2005 を起動し、空のプロジェクト(JniTestLib)を作成します。
Expressでは、DLLの項目がないため、ここでは、空のプロジェクトを選択します。

空のプロジェクトを作成

▽ C++ファイルの追加

作成したプロジェクトに、新規にC++ファイル(JniTestLib.cpp)を追加します。

C++ファイルを追加

②で生成したC++用のヘッダー(JniTest.h)をプロジェクトに追加します。

ヘッダーをプロジェクトに追加

[ JniTestLib.cpp ]

#include 
#include 
#include "JniTest.h"

JNIEXPORT jstring JNICALL Java_JniTest_TestMethod(JNIEnv *env, jobject obj)
{
    printf("DLLの Java_JniTest_TestMethod() が呼ばれました。\n");
    return env->NewStringUTF("Java_JniTest_TestMethod() was completed.");
}

④ ③のコードをコンパイルし、DLLを生成する。

▽ プロジェクトのプロパティの設定

プロジェクトのプロパティを、DLL生成用に変更します。
[構成プロパティ]→[全般]→[構成の種類]を "ダイナミック ライブラリ(.dll)" に変更します。

プロジェクトのプロパティの設定

[構成プロパティ]→[C/C++]→[全般]→[追加のインクルードディレクトリ]に、JDKのインクルードディレクトリを指定します。

インクルードディレクトリを指定1
インクルードディレクトリを指定2

[構成プロパティ]→[リンカ]→[全般]→[出力ファイル]の拡張子を、"dll"に変更します。

拡張子の変更

以上で、プロパティの設定は、完了です。

▽ DLLのビルド

ビルドし、エラーがでなければ、JniTestLib.dll が生成されます。

⑤ ②のJavaのクラス(JniTest.class)を実行し、DLL(JniTestLib.dll)のネイティブメソッドを呼ぶ。

②のJavaクラス(JniTest.class)、④のDLL(JniTestLib.dll)を同一ディレクトリにコピーします。
コマンドプロンプトから、Javaクラス(JniTest.class)を実行すると、以下のようにDLL(JniTestLib.dll)のネイティブメソッドが呼ばれます。

ネイティブメソッドを呼ぶ

- 以上 -

編集履歴
[2007/05/17] 新規作成。
[2007/05/19] 前置きを少し修正。
[2008/08/29] レイアウトを修正。
[2009/01/--] サイト移転。レイアウト変更。
[2009/06/24] レイアウト変更。
[2010/03/10] サイト移転。レイアウト変更。
[2010/07/04] URL変更。

カテゴリ: Java  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
■ C#からネイティブコードの呼び出し(DllImport属性) - 2010/03/10 22:00:00

C#からネイティブコード(C言語、C++等)の関数を呼ぶ場合、
C#側で"System.Runtime.InteropServices.DllImport"属性を指定して、その関数と同様のメソッドを宣言します。
DllImport属性を指定して宣言すると、ネイティブコードの関数を、通常のメソッドのように、C#から呼び出せるようになります。

今回は、C#のコンソールアプリから、WIN32APIのGetComputerName()を呼んでみます。
GetComputerName()は、ローカルコンピュータのNetBIOS名を取得するAPIで、Kernel32.dllにあります。

開発環境と主な手順は、以下のようになります。

▽ 開発環境

OS: WindowsXP Professional
C#コンパイラ: Visual C# 2005 Express Edition

▽ 主な手順

① VC#で新規プロジェクト(コンソール アプリケーション)を作成する。
② DllImport属性を指定して、GetComputerName()を宣言する。
③ ②のGetComputerName()を呼び、コンピュータ名を取得し、表示する。

◆ 開発

① VC#で新規プロジェクト(コンソール アプリケーション)を作成する。

今回は、プロジェクト名を"DllImportTest"にしています。

② DllImport属性を指定して、GetComputerName()を宣言する。

DllImport属性は、下記、ソース(Program.cs)の青字部分のように指定します。
メソッドの宣言は、WIN32APIと.NET(C#)で、変数の型名が異なるので、以下のように一致させる必要があります。

◇ WIN32API

BOOL GetComputerName(LPTSTR lpBuffer, LPDWORD lpnSize);

◇ .NET(C#)

public static extern bool GetComputerName(StringBuilder buffer, ref uint size);
または
static extern unsafe bool GetComputerName(byte* lpBuffer, long* nSize);

WIN32APIと.NET(C#)での型の違いは、PINVOKE.NET で調べられます。

PINVOKE.NET: http://pinvoke.net/

[ Program.cs ]

using System;
using System.Collections.Generic;
using System.Text;

namespace DllImportTest
{
    class Program
    {
        // DllImport属性をしてメソッドを宣言
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        public static extern bool GetComputerName(StringBuilder buffer, ref uint size);

        static void Main(string[] args)
        {
            StringBuilder buffer = new StringBuilder(256);
            uint size = 256;

            // API呼び出し
            if (GetComputerName(buffer, ref size))
            {
                // コンピュータ名を表示
                System.Console.WriteLine("Computer name: {0}", buffer.ToString());
            }
            else
            {
                System.Console.WriteLine("GetComputerName() - error");
            }
        }
    }
}

③ ②のGetComputerName()を呼び、コンピュータ名を取得し、表示する。

②で宣言したGetComputerName()を、赤字部分のように呼び、コンピュータ名を取得します。
最後に、WriteLine()メソッドで、コンピュータ名を表示して終了です。

DllImport属性を使ってメソッドを宣言すれば、WIN32APIでも通常のメソッドとして呼べるようになります。

- 以上 -

編集履歴
[2007/05/19] 新規作成。
[2007/07/14] 誤植修正。
[2008/08/29] レイアウトを修正。
[2009/01/--] サイト移転。レイアウト変更。
[2010/03/10] サイト移転。レイアウト変更。
[2010/07/04] URL変更。

カテゴリ: C#  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
P. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 List
移転連絡
[2025/06/19]
新サイト[MOT NOTE
へ移転しました。
最新記事
2025/06/19 00:00
新サイト[MOT NOTE]へ移転
2021/11/24 00:00
東芝 dynabook KIRA V832/28HS のSSD換装
2015/01/12 12:00
ニコ窓の開発&公開終了
2014/05/04 00:00
ニコ窓 Ver3.015 公開
2014/04/27 00:00
ニコ窓 Ver3.014 公開
コンテンツ一覧
サイト情報
2025/06/19 00:00
新サイト[MOT NOTE]へ移転しました。
閲覧者数
今日: 74 昨日: 94
合計: 850303 (PV)
開始: 2010/03/11
ツールは公開終了しました。
リンクは自由に貼って頂いて構いません。
管理人: motta
  はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく
  RSS2.0 RSS2.0
  My Yahoo!
  livedoor Reader
  Windows Live
ACR WEB