実行可能プログラムにつきまして

投稿者:cpxmx729 <cpxmx729 あっとまーくgmail.com> 投稿日:2020/01/17(Fri) 10:47:08 No.2553

https://wp.utopiat.net/2017/05/171/

上記URLを参照し、プログラムのソースコードを実行してみました。

デザイナ上では問題なく動作するのですが、実行ファイルを生成して実行しても、プログラム自体が落ちてしまいます。

OS
Windows10pro 64bit

実行ファイル作成時に「常に32ビット(WoW64)で起動する」にチェックしてあり、DLLも実行ファイルと同じフォルダに置いてある状態です。

その状態で実行ファイルを作成しても、EXEを実行時に反応がなく数秒後に応答なしになってしまうので、チェック項目のチェックを付けたり外したりと組み合わせを変えてみたのですがすべて同様の状況です。

どのような理由が考えられますでしょうか?
よろしければ教えてください。

Re: ドットネット型に「変換する」手順を追加しました

投稿者:schutzen 投稿日:2019/12/31(Tue) 16:30:12 No.2552

ゆうとさん、こんにちは。
> 議論を軽く呼んだ程度で恐縮ですが、
> 1.6.990でドットネット型に「変換する」手順を追加しました。
いえいえ、年末のお忙しいところ大変ありがとうございます。

> ただドットネット型周りの機能については、あくまでも補助的に用意しているものですので
> 何かの都合でバッサリ挙動が変わる可能性もあります。
> C#等でプラグインとして用意する方が確実かもしれません。
プラグイン作成も進めていく予定ですが、なにぶん時間がかかりそうですので、今回のアップデートで当面の作業が進みそうです。
ちなみに、お示しいただいたサンプルに少し追加して、すんなり画像タグの表示ができました。
------------------
Image型というドットネット型(「System.Drawing.Image」)を作る
ファイル文字列=「xxxx.jpg」
dotnet_imageというドットネット型(「System.Drawing.Image」)を作る
imgは、dotnet_imageから「FromFile」を{ファイル文字列}で呼び出す
imgをImage型へ変換して画像テストとする
画像テストのPropertyItemsを報告する
itemは、画像テスト:GetPropertyItem(40094)
item_byte配列は、「{[itemのValue]}」を配列化
item_byte配列を「Unicode」という文字コードでバイナリ配列から変換したものを報告
--------------------
また来年もよろしくお願いいたします。

ドットネット型に「変換する」手順を追加しました

投稿者:ゆうと 投稿日:2019/12/30(Mon) 02:25:37 No.2551

こんにちは ゆうとです。
議論を軽く呼んだ程度で恐縮ですが、
1.6.990でドットネット型に「変換する」手順を追加しました。

Imageクラスのような.NET Frameworkの主要なデータ型・クラスについては、プロデルが自動的に型変換する機能を持っています。ドットネット型でインスタンスを生成した場合も、メソッド,プロパティ等の戻り値が、自動的にプロデル型へ変換されるため、場合によっては扱いづらいかも知れません。

「変換する」手順では、プロデル型へ変換される前の元の型のオブジェクトを返します。
これならImageクラスのインスタンスに直接アクセスできると思います。

ただドットネット型周りの機能については、あくまでも補助的に用意しているものですので
何かの都合でバッサリ挙動が変わる可能性もあります。
C#等でプラグインとして用意する方が確実かもしれません。

--------------
Image型というドットネット型(「System.Drawing.Image」)を作る
ファイル文字列=「xxx.jpg」
dotnet_imageというドットネット型(「System.Drawing.Image」)を作る
imgは、dotnet_imageから「FromFile」を{ファイル文字列}で呼び出す
imgをImage型へ変換して画像テストとする
画像テストのPropertyItemsを報告する
[画像テスト:GetPropertyItem(20624)]を報告する
--------------

参考にして下さい。

Re^6: 静的メソッドの呼び出しではインスタンスは不要です

投稿者:schutzen 投稿日:2019/12/27(Fri) 23:07:31 No.2550

通り道さん、詳しくご回答下さり、大変ありがとうございます。

実を言うと、jpegファイルを読み込んでImageオブジェクトを返したり、逆にそれを引数にしてプロパティ項目を編集するPluginはどうにか作れてはいました。しかし、そこそこ動作するものの不意にStaticCallExpressionエラーが出るので困っておりました。ラッパー種類や画像型の自動変換を全然知らずに作ったものなので、いただいたアドバイスをもとに作り直していきたいと思います。
ありがとうございました。

Re^5: 静的メソッドの呼び出しではインスタンスは不要です

投稿者:通り道 投稿日:2019/12/27(Fri) 10:05:53 No.2549

Wrapperの場合、何らかの手段でラップした型のオブジェクトが生成されれば、自動的にそのWrapperClassで実装した種類として扱えます。
なので、何らかの方法でImageクラスのオブジェクトが生成できればよいです。

1つは、Pluginの中で、Imageのオブジェクトを返す手順を実装してそれを呼び出す方法。
もう1つは、ドットネット型などでImageのオブジェクトを返すメソッドを利用して取得する方法。

です。
前者で済む場合は、もともとImageを継承したPluginを作る方が楽な場合が多いと思います(シールされているクラスは除く。シールされているクラスは継承できません)
後者の場合、ラップしたPluginを作ると変換したりする手間が省けるため、ドットネット型による呼び出しと混在する場合は便利です。

Imageに限定した場合、プロデルの画像型が、System.Drawing.Bitmapへの自動変換を持っていたと思いますので、引数としてImageクラスを持つ手順を実装すれば、画像型のオブジェクトを指定することでImageクラスのオブジェクトとして受け取れるので、それをうまく利用するのも手です(System.Drawing.BitmapはImageのサブクラスです)
※自動変換(Converter)そのものは、Pluginから追加できたりはしないようです。

Re^4: 静的メソッドの呼び出しではインスタンスは不要です

投稿者:schutzen 投稿日:2019/12/27(Fri) 07:10:22 No.2548

通り道さん、ありがとうございます。初歩的な誤りですね、ご丁寧にご指摘いただいてすみません。「画像種類が扱われるとラッパー種類が生成される」の部分を勘違いしておりました。
そうなると、生成されたイメージ型種類はどう呼び出すのでしょうか?よろしくお願いします。

Re^3: 静的メソッドの呼び出しではインスタンスは不要です

投稿者:通り道 投稿日:2019/12/26(Thu) 22:23:14 No.2547

プロデル側のプログラムを見る限り、イメージ型が登場してないように見えるのですが・・・

ファイル文字列=「test.jpg」
→ファイル文字列は、文字列型

画像テストは、画像(ファイル文字列)を作ったもの
→画像テストは、画像型

画像テストの本体を報告する
→画像型に対して、本体という名前のフィールドを参照しようとしている
 これは、エラーメッセージに書かれている通り

Re^2: 静的メソッドの呼び出しではインスタンスは不要です

投稿者:schutzen 投稿日:2019/12/26(Thu) 18:09:39 No.2546

こんにちは。その後、Image型のプロパティ項目を編集するプラグインを作っています。

先日、アップしていただいた記事「プロデルプラグインの作り方」を参考に、Image型のラッパー種類を生成するプラグインをC#で次のように書いて、
------------------------
  public class イメージ型 : ClassWarpper<Image>
  {
    public Image 本体
    {
      get { return baseObject; }
    }
  }
-----------------------

プロデルのこんなコードで試してみたところ
-----------------------
「ImageWrap.dll」を利用する
ファイル文字列=「test.jpg」
画像テストは、画像(ファイル文字列)を作ったもの
画像テストの本体を報告する
-----------------------

エラーとなりました。
-----------------------
『画像テストの本体』という部分で
画像型には「本体」という設定項目または手順がありません。

[エラー番号302] [はじめ:8行目]
プロデル 1.6.989 (32)
----------------------
プラグインの書き方で何か間違いがあるのでしょうか。それとも、画像ファイルを開く処理はプラグイン側に持たせた方がよいのでしょうか。よろしくご教示ください。

Re^2: メニュー項目の一括追加

投稿者: 投稿日:2019/12/15(Sun) 16:32:38 No.2545

 こんにちは。

 260文字を超えるファイル名はともかく、メニュー項目は確かに多いと選択するのが大変ですよね。
 今はクリップボードの履歴をとるツールを作っているんですが、最大1000件くらいまで増える可能性があるので、グループ化はした方がいいかもしれません。
 まあ、それは追加がなんとかなってから考えたいと思います。
 そもそも、C#に速度を求めるのは、間違っている気もしないでもないですが。

 それでは。

Re: メニュー項目の一括追加

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/12/15(Sun) 15:14:38 No.2544

こんにちは。アークです。

回答では無いですが…。
260文字を超えるパス名とか、500を超えるメニュー項目とか凄い状況ですね。
例えそれが可能になったとしても表示や選択が大変そうです。
もしグループ分けなどが可能ならば多段階メニューを検討されては如何でしょうか。

▲ページの先頭へ

- WebForum -