4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

プラグインの作成について

4 posters

Page 1 of 2 1, 2  Next

Go down

プラグインの作成について Empty プラグインの作成について

投稿 by 山田敏之 2022-08-30, 9:48 am

弊社技術スタッフがプラグインの作成について、ドキュメントにまとめました。
ご参考になれば幸いです。

「簡単なプラグインを作ってみましょう」
https://github.com/miyako/4d-tutorial-my-first-plugin


山田敏之

投稿数 : 251
登録日 : 2016/07/26

Ota likes this post

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by 内山 高志 2022-09-01, 10:43 am

おお。
昔と違って、4Dが標準機能で大体の事ができる様になったので
プラグインは最近作ってませんでした。
ただ、やはりIME制御とかどうしても中々上手くいかない時とか
「プラグインをつくろうかなー」と思うことも時々あるので、
こういった情報はとても嬉しいです。
できれば、バージョンが変わる毎に差分をアップデートしてもらえると
嬉しいです。
もちろん、無理のない範囲でお願いします Very Happy

内山 高志

投稿数 : 37
登録日 : 2016/07/13

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-01, 11:09 am

説明してくれるのはとても助かるのですが...
C#やSwiftなど最新の言語で書く方法をご教授してもらわないと新規参入は望めないのではないでしょうか。
おそらくインターネット上にあるサンプルコードを参考にするはずなのですが、新しい機能になるほど、ほとんどがC#やSwiftで説明されたものがほとんどです。
後は特殊なハードウィアなどをコントロールする為の提供されたDLLや_NET Frameworkなどのライブラリを利用する方法や画像の扱い方などが新規参入される方には参考になるのではないかと思います。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-01, 11:27 am

PythonやPHPの様に4D側でDLLを定義できるとほとんどプラグインは必要なくなる様な気もします。
4Dでもクラスが作れる様になったのでもうそろそろかなとは思っているのですが...
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-07, 1:02 pm

まったくお察しのとおりで,開発部は「できればプラグインは使わないで欲しい」という意見が支配的です。むしろ,4D.SystemWorkerクラスで外部プログラムを制御することを積極的に勧めています。

https://blog.4d.com/system-worker-vs-launch-external-process/

最近はGo言語で開発されたCLIプログラムが充実しています。たとえば,Rcloneでファイルのアップロードやダウンロードができるかもしれません。

Goのメリットとして,自己完結したMac/Windows/Linuxの実行ファイルが用意されており,依存ファイルやライブラリなどをインストールする必要がなく,4Dプロジェクトと一緒に配付することが容易である,という点が挙げられます。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-07, 6:14 pm

CLIでできるものとどうしてもプラグインでないと作れないものを分ける必要があるのですが、何か表みたいな物はありますか。
そうでないと簡単に呼び出せるのにわざわざプラグインを作ってしまうと思います。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-08, 10:28 am

まずはCLIを試してみて,ダメならプラグイン・・・でしょうか

たとえば

https://github.com/miyako/4d-component-gs

https://github.com/miyako/4d-component-pdfcpu

上記いずれもCLIでは「NG」なのでプラグインが必要かも・・と考えています。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-08, 4:07 pm

1. バーコード関連はプラグインで大変助かっています。お世話になりました。
2. ピクチャーの操作はできればプラグインの方が良いかと思います。変数で受け渡しができるので。
3. 映像および音声の録音もなどもプラグインの方が良いかと思います。Macでは権限関係もあるのでほぼできないですが。
それ以外はCLIがあればそちらで行たいです。

紹介していただいたGOの導入の仕方からGOで利用できる便利なコマンドの紹介があればありがたいです。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-11, 5:57 pm

例1:OSのAPI、またはハードウェア添付のライブラリDLLから1つの関数を呼び出す。
この場合、何が最適でしょうか。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-12, 3:41 pm

「DLL」は,Microsoft FoundationクラスライブラリやWin 32 DLLなど,Microsoftのライブラリ全般に使われているファイル拡張子です。つまり,DLLという拡張子だけでは,どんなファイルなのかわかりません。

https://docs.microsoft.com/ja-jp/cpp/build/kinds-of-dlls?view=msvc-170

CをコンパイルしたDLLであっても,使用したコンパイラーやリンクしたランタイムライブラリ,呼び出し規約,最適化フラグの種類によってリンクの仕方が違います。またCPUアーキテクチャが呼び出す側と合致している必要があります。

ハードウェア添付のDLLの場合,特に断りがなければ,LoadLibraryEx等のAPIでエントリーポイントを取得するタイプかと思われますので,Cで呼び出すのが一番シンプルかと思われます。つまりプラグインがベストの選択肢です。Win32 APIを呼び出す場合も同様です。ただし,APIの種類によってはPowerShell等のスクリプトでも達成できることがあります。

C#で作成したDLLは,i386/x86_64のコンパイルされたバイナリファイルではなく,C#の中間言語ライブラリなので,CではなくC#から呼び出す必要があります。つまり,プラグインではなく,外部プログラムを「たたく」スタイルになります。

Mac用のC#もありますが,すみません,使ったことがないので,良くわかりません・・・

https://visualstudio.microsoft.com/ja/vs/mac/

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-12, 4:56 pm

Macの場合は、dylibの呼び出しになるかと思います。.framewaorkを呼び出すとかでしょうか。
pythonのライブラリ呼び出しが参考になるのではないかと思います。

C#のDLLの場合、外部プログラムを「たたく」とは具体的にどの様になりますでしょうか。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-12, 5:30 pm

C#で実行ファイルを作成し,コマンドライン引数や標準入出力でデータの受け渡しをするイメージでしょうか。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-12, 5:33 pm

コマンドラインアプリを作成してLEPで呼び出す方法ですね。
例1は全てこれで良いのではないでしょうか。タイムラグなどはあるかもしれませんが、デバッグも楽ですしわざわざプラグインにする必要がないと思います。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-13, 12:15 pm

windows限定ですがこれ使えないでしょうか。
System.Management.Automation.dll
Powershellをレスポンシブに実行できる様です。4Dのメソッドで実行できる様になればほとんどのAPIの呼び出しができる様なので
コマンドラインアプリ+LEPでなくてもよくなる様に思います。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-15, 8:33 am


miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-15, 8:38 am

LAUNCH EXTERNAL PROCESSで

powershell -file {ps1ファイルのパス}

または

powershell -command {スクリプトのソースコード}

とするのはどうでしょうか

https://superuser.com/questions/1080239/run-powershell-command-from-cmd

システムワーカーを使用すれば

対話形式のCLIに対するキーボード入力をシミュレートすることができます。

https://blog.4d.com/launch-an-external-process-asynchronously/


miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-15, 9:48 am

LAUNCH EXTERNAL PROCESSでpowershell -file {ps1ファイルのパス}だと1つの実行で完結するのだと思いますが、

System.Management.Automation.dllではpowershellのプロセスを閉じる前で前回の状態を維持してくれるみたいなのです。
4Dメソッドの裏でpowershellのプロンプトが動いている感じではないでしょうか。これを使って独自シェルウィンドウを作っているサンプルがあった様に思います。

実行状況によって次に実行するコマンドレットを4Dメソッドから変更できるところがメリットではないかと考えました。
今までだとプラグインにしないといけなかった複数の関数の組み合わせを順番に呼び出して完結させないといけないカードリーダのAPIやTWAINのAPIなども4Dメソッド内で記述できる可能性があるのかと思いました。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-15, 5:43 pm

簡単な例題を作成してみました

https://github.com/miyako/4d-class-powershell

> 実行状況によって次に実行するコマンドレットを4Dメソッドから変更できるところがメリットでは

たしかにそうなのですが,コマンドラインから返される文字列を解析するのがけっこう面倒だということが例題から感じていただけると思います。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-15, 7:50 pm

例題ありがとうございます。早速動かして見たのですがこちらでは空白が返ってくるのですが、何か注意事項はありますでしょうか。
VMware+win10の環境です。
[System.Net.IPAddress]::Any | ConvertTo-Json -Compress
が実行するコマンドレットだと思いますが、Windows Powershell SE上ではちゃんとレスポンスが返ってきています。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-16, 4:51 pm

フィードバックありがとうございます。

すみません,macOSでしか検証していませんでした。

修正点

https://github.com/miyako/4d-class-powershell

* Windowsは改行コードがCRLF・macOSは改行コードがLF

* コマンドを連続実行したい場合,コマンド毎にcloseInput()してはいけない。改行コードで入力を確定する。

* closeInput()は最後の入力で送信する。これでOnResponse, OnTerminateの流れとなる。

* closeInput()の後にコマンドは送信できない。stdInがbad file descriptorになる。

* OnResponseではすべての出力がまとめて返される。コマンド毎の出力はOnDataで捕捉する。

その他

* Macは色付けのESCシーケンスが返されるがWindowsは返されない。

https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-16, 8:31 pm

再度試して見たのですがやはり空白が返ってきます。宮古さんのところでは動いてるんですよね。
何か足りないんでしょうか。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-16, 10:37 pm

こちらではgit cloneしてMonterey, Catalina, Windows 10で検証しました。

Rバージョンをご使用でしょうか。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-17, 10:18 am

v19R6 282489です。

デバッグして見たところ、Function scriptのところで

PowerShell 7.2.6\r\nCopyright (c) Microsoft Corporation.\r\n\r\nhttps://aka.ms/powershell\r\nType 'help' to get help.
\r\n\r\n
PS C:\\Program Files\\4D\\4D v19 R6\\4D> [System.Net.IPAddress]::Any | ConvertTo-Json -Compress{"AddressFamily":2,"ScopeId":null,"IsIPv6Multicast":false,"IsIPv6LinkLocal":false,"IsIPv6SiteLocal":false,"IsIPv6Teredo":false,"IsIPv6UniqueLocal":false,"IsIPv4MappedToIPv6":false,"Address":0,"IPAddressToString":"0.0.0.0"}\r\n

のデータが返ってきていました。ですがなぜか取得したデータがcs.TEST.new().run().dataに入らず、ALERTで空白になっているみたいです。

結局これはLEPとの違いとしては内部的なコマンドプロンプトからpowershellを実行してpowershellのプロンプトを表示してコマンドレットを実行して結果を受けているので前回実行時の状態を維持できているという認識であってますでしょうか。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by miyako 2022-09-17, 10:20 am

昨日アップしたバージョンはALERTも.dataもなかったと思います。

https://github.com/miyako/4d-class-powershell/blob/main/powershell/Project/Sources/Methods/TEST.4dm

当初のバージョンをお使いではないでしょうか

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by hosaka 2022-09-17, 10:24 am

リリースのところから4d-class-powershell-0.0.1.zipをダウンロードして確認しています。
メソッドにもis Windowsの処理が追加されているので新しいバージョンだと思います。
hosaka
hosaka

投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

プラグインの作成について Empty Re: プラグインの作成について

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

Page 1 of 2 1, 2  Next

トップに戻る


 
Permissions in this forum:
返信投稿: 不可