質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

2回答

11586閲覧

WPFのアプリケーションをdll化したい

plue

総合スコア71

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

3クリップ

投稿2016/04/21 06:12

現在VisualStudio2015を使用し、WPFアプリケーションを作成しています。
WPFアプリケーションをjni4netを使用し、javaと連動させるためにWPFのdllを作成したいのですが、方法がわかりません。

以下のサイトを参考にしようと思っているのですが、
C#+VisualStudioでの開発知識が初めてで知識が乏しいため、具体的な手順が分かりません。

https://social.msdn.microsoft.com/Forums/ja-JP/c376d046-6169-4b34-865d-46abacc6d7f3/wpfwindowdll?forum=wpfja

方法をご存知であれば、ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ご回答いただいたojikkoさん、ありがとうございました。
とりあえず以下の方法でdll化とWPFの画面をJavaから呼び出すことを実現できました。

①XAMLを作成する

(例)win.xamlファイルとして保存 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="テスト" Width="320" Height="240" FontSize="20" > <StackPanel> <TextBlock x:Name="text1" Text="ボタンのクリックイベントサンプル" /> <Button x:Name="button1" Content="クリック" /> <Expander x:Name="expander" Header="Expander"> <Grid Background="#FFE5E5E5"/> </Expander> </StackPanel> </Window>

②ライブラリ(アセンブリ)の参照追加。

「ソリューションエクスプローラ配下の【参照】」→「右クリック」→「参照の追加」→ 「アセンブリ」→「フレームワーク」→以下の3つを追加 ・PresentationCore ・PresentationFramework ・WindowsBase

③クラスライブラリの作成(Javaからの呼び出しされる部分や、画面処理など)。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.ComponentModel; 7using System.IO; 8using System.Threading; 9using System.Windows; 10using System.Xml; 11using System.Windows.Markup; 12 13namespace ClassLibrary1 14{ 15 public class Class1 16 { 17 [STAThread] 18 /** 19 * Javaから呼ばれるメソッド 20 */ 21 public void CallCSharp() 22 { 23 var th = new Thread(new ThreadStart(ShowApp)); 24 // STAThread指定 25 th.SetApartmentState(ApartmentState.STA); 26 th.Start(); 27 } 28 29 /** 30 * メニュー画面表示メソッド 31 */ 32 private void ShowApp() 33 { 34 Logger("ShowApp開始"); 35 Application app = new Application(); 36 Window window = new Window(); 37 38 // xaml読み込み 39 using (FileStream infs = new FileStream("win.xaml", FileMode.Open)) 40 { 41 XmlReader xmlReader = XmlReader.Create(infs); 42 window = (Window)XamlReader.Load(xmlReader); 43 } 44 45 // 画面起動 46 Logger("Run-Start"); 47 app.Run(window); 48 } 49 } 50}

④dllファイルの作成

・「ソリューションエクスプローラ」→「右クリック」→「プロパティ」→「アプリケーション」→「出力の種類」を「クラスライブラリ」に変更 ・さらに64bitアプリケーションの場合、プロパティ内の「ビルド」→「32ビットを優先」のチェックを外す ・「ソリューションエクスプローラ」→「右クリック」→「ビルド」でdllが作成される

上記により、WPFを含んだdllファイルが作成できる。

投稿2016/04/26 06:46

plue

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単にDLLを作成したいだけであれば、プロジェクトのプロパティの[アプリケーション]タブのアプリケーションの種類をクラスライブラリに変更すれば、作成できます

ただどっち向きに連動させるかわかりませんが(多分Java→C#でしょうが)、jni4netは万能なものではないと思いますよ
→もしJavaからWPFのUIを使いたいとか考えられているなら

個人的にはPOCO(Plain Old Clr Object)とかPOJO(Plain Old Java Object)をやりとりできるレベルって考えていたんですが

投稿2016/04/21 22:15

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

plue

2016/04/22 06:17

回答ありがとうございます。 教えていただいた方法でdllの作成はできたのですが、dllからjni4netのツールでjar等を生成するツールにてうまく生成ができなかったため、単にクラスライブラリでビルドするだけではうまくいかないようでした。 仕事上、JavaからC#のWPFの画面を起動することになり、 現在、実現方法を模索中のところです。 jni4netが使用できないとなると、また別の方法で(C++を間に挟むとか…?)を考えないといけないですね。。。
dojikko

2016/04/22 07:23

> JavaからC#のWPFの画面を起動する よくわかんないですけど、Process.Start的なもの(Javaは詳しくないのであくまでもイメージ)でExeを実行する形とか取れないんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問