なかなかどうして の意味

それほどでもない、と思っていたものが
実際はその通りではなく、それどころか思っていた以上であるさま

 

今回に関係ある単語の意味。他のは略。

なかなか

予想した程度を上回るさま形容動詞。
  ex ) なかなかな出来栄え。

 

予想した以上に、意外に、かなり。副詞。

 

( 打消しの語を伴って ) 容易に実現しないさま。
  ex ) なかなか進まない。

 

どうして

強い否定の気持ちを表す。決して…ない。…はずがない。副詞。
  ex ) どうして招こうか。

 

・前の言葉を、予想外であるという意味を込めて
強く否定する気持ちを表す。それどころか。副詞。
  ex ) 簡単そうだが、どうしてなかなか難しい。なかなかどうしてとは別 ?

 

感動を込めて強調する気持ちを表す。なんともやは。感嘆詞。
  ex ) どうして、すごい人だかりでした。

 

・強く否定する気持ちを表す。とんでもない。感嘆詞。
  ex ) どうして、どうして、私の及ぶところではない。

 

 

 

こんなに美しいとはなかなか。どうして。← この場合のどうしては感嘆詞。多分。

こちらから。
https://www.weblio.jp/content/%E3%81%AA%E3%81%8B%E3%81%AA%E3%81%8B%E3%81%A9%E3%81%86%E3%81%97%E3%81%A6
https://dictionary.goo.ne.jp/jn/163231/meaning/m0u/
https://dictionary.goo.ne.jp/jn/155910/meaning/m0u/

以上。

なぜでも の意味

「でも」の使い方たくさんあるな。一例を挙げる時に使ったり、他色々、接続、係助詞、接頭…。

 

A:何故×××なの ?
B:なぜでも。

 

なぜでも の意味。

理由を問われて、答えを拒否するのについて用いる。
なぜでも、の他「どうしてでも」も同様。

 

 

こちらから
https://kotobank.jp/word/%E3%81%A7%E3%82%82-576904

以上。

C++_配列を関数に渡したいメモ

配列を受け取ってメンバ変数に代入し値を保持したかったが、時間かかったので。

 

配列全体バイト数sizeof ( 配列変数 )
配列要素型サイズsizeof ( )

 

配列変数を引数にとる場合は、関数の定義の方は void func(int array[ ]);のように
大きさの未定な配列変数の形にする。

void func(char s[ ]); と void func(char* s); は同じ。
void func(char s[5]); も void func(char s[ ]); と全く同じ。

 

以下のコードを実行すると、GetAry 関数で受け取った全体の配列サイズは
8 と出力される。
int サイズは 4 バイトなので、要素数は 2 ということになってしまう。
これは、ary は配列の先頭ポインタを表わす為。つまり受け取った値ポインタ
故に 2 が出力。

    #define COUNTOF(array) (sizeof(array) / sizeof(array[0]))
    void GetAry(int ary[ ]);
   
    int main(int argc, char * argv[ ])
    {
        int ary[ ] = { 10, 11, 12, 13 };
        GetAry(ary);
       
        return 0;
    }
   
    void GetAry(int ary[ ])
    {
        int getA[COUNTOF(ary)];
       
        std::cout << sizeof(ary) << std::endl; // 8
       
        for (int i = 0; i < COUNTOF(ary); ++i)
        {
            getA[i] = ary[i];
            std::cout << ary[i] << std::endl; // 10 , 11
        }
    }
   

&ary配列全体表わすポインタなので、
引数を int (&ary)[4] に変える。( 配列の参照を渡す )
そうすると、全体サイズは 16 となり、10 ~ 13 まで出力される。

 

 

===Memo===

・ポインタも配列変数と同じく [ ] で各要素を参照できる。

・プロトタイプ宣言では、引数にchar s[ ]と配列型を指定してもポインタとして扱う。 

・配列型は左辺式 NG 。

・auto foo = &ary; において、foo の型は int (*foo)[4] 。(*foo)[4] が配列の参照。

・foo を Debug で出力したらどうなるんだろ。

・cout で出したら foo も &ary も 00000000002DFAE0 と出た。 

 

 

 

こちらから。
http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01035.html
https://qiita.com/go_astrayer/items/b0fd2e5cd89412eb65bf
https://marycore.jp/prog/c-lang/countof-array-and-sentinel-value/
http://d.hatena.ne.jp/kenta11626918/20130117/1358409631

以上。

IEnumerable の Zip について

Dictionary で出てきたので調べ。

シーケンス
連続連続して起こる順序。あらかじめ設定しておく動作の順序。
順番に並んでいること。並んでいる順番で処理を行うこと。
処理の順番の並びや、データの順番の並びのこと。

 

2 つのデータを 1 つまとめる

同じインデックスを持つ要素をマージする。
同じ要素数でない場合、数が少ない方のシーケンスが基準。
型を試しに出力したら混乱しそうになったが、型はその都度自分でしたいようにすればいいかと。

 

 

各、変数名.GetType() で型を取得。

ex 1 )
int 型配列と string 型配列を連結

    int[ ] num = { 1, 2, 3, 4 };
    string[ ] str = { "A", "B", "C" };
   
    var result = num.Zip(str, (foo, bar) => foo + bar);
    // System.Linq.Enumerable+<ZipIterator>d__60`3
    //   [System.Int32,System.String,System.String]
   
    foreach (var item in result)
    {
        Console.WriteLine(item);  // System.String
        // 1A 2B 3C
    }

 

ex 2 )
int 型配列と string 型配列を匿名型でマージ。

    var result = num.Zip(str, (foo, bar) => new { n = foo, s = bar });
    foreach ( 略
        Console.WriteLine(item.n + item.s);  // Int32 と String 型

result の型は、
System.Linq.Enumerable+<ZipIterator>d__60`3
  [System.Int32,System.String,
    <>f__AnonymousType1`2[System.Int32,System.String]
  ]

item の型は、<>f__AnonymousType1`2[System.Int32,System.String]
出力すると、{ n = 1, s = A } , { n = 2, s = B } … となる。

 

ex 3 )
int 型配列と string 型配列を匿名型でマージし、Dictionary 型に変換

    var result = num.Zip(str, (foo, bar) => new { foo, bar })
        .ToDictionary(d => d.foo, d => d.bar);
    foreach ( 略
        Console.WriteLine(item.Key + item.Value);  // Int32 と String 型

result の型は、
System.Collections.Generic.Dictionary`2[System.Int32,System.String]

item の型は
System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]
出力すると、[1, A] , [2, B] … となる。

 

 


下記でもほぼ同じ結果となったが、
result の型は ex 2 の <>f__AnonymousType1 `2 の部分が
System.Collections.Generic.KeyValuePair `2 となった。

    var result = num.Zip(str, (foo, bar) => new KeyValuePair<int, string>( foo, bar));

 

匿名型
データ型の定義をする必要がなく、使用可能な名前を持たない
型の名前はコンパイラにより生成され、ソースコードレベルでは使用不可。 

    var x = new { name = "Foo", id = 101 };

num.Zip(str, (foo, bar) => Tuple.Create( foo, bar )); でも可。

Tuple は組みを表す単語
名前が不確定な複数のオブジェクトの 1 組を表現する。
KeyValuePair が Key と Value のデータを保持するのに対して、
Tuple は最大 8 つの値を保持することが可能。
取りだしは変数名.Item1。数に応じて Item2 などに。 

 

 

 

こちらから。
Enumerable.Zip Method (System.Linq) | Microsoft Docs
https://pknight.hatenablog.com/entry/20130325/1364230992
https://algorithm.joho.info/programming/csharp/variable-gettype-cs/
https://devlights.hatenablog.com/entry/20100921/p1
http://moriblog.kit-eng.com/?p=981
Type Class (System) | Microsoft Docs
https://dictionary.goo.ne.jp/jn/92991/meaning/m0u/
https://kotobank.jp/word/%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9-3904
https://ufcpp.net/study/csharp/sp3_inference.html#anonymous
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/objects-and-classes/anonymous-types

以上。

サクラエディタ_トピックツリー

間違えて押して偶然知った。

 

F11 で立ち上がる。
アウトライン解析」という機能。

 編集中のテキストから、特定の見出し記号や、関数位置などを解析して
一覧表示する。
ソースコードの関数や宣言を抽出し管理する為のもの。

 

ex)
f:id:koshinRan:20190614134420p:plain

 

 

 

こちらから。
https://sakura-editor.github.io/help/HLP000064.html
https://ncode.syosetu.com/n2989eb/5/

以上。

 

英語_肯定文の疑問文

口語的な表現。きちっとした文章では見られない。
内容確認をしたい時のみ使える。
目の前に起きた状況や、誰かが話していた内容を前提として、
内容確認」をしたい場合に「肯定文の形のまま」で尋ねることが可能。

ex ) She is your mother ?

 

すぐに信じることができなかったり、予想外だった時など
驚きの感情と共に尋ねることができる。

Is ~ などの疑問文は、yes か no のどちらなのか本当に分からない、
という場合に使われる。

 

否定文も同じ。
既に話された内容について内容の確認をしたい場合は、
その内容が「否定」ならば「否定文の形のまま」で尋ねることができる。

 

 

 

こちらから。
http://dupler.co.jp/eng_school/natural_english/question_form/

以上。

C#_メディアプレイヤー ( デザインに配置 )

C# でメディアプレイヤーをつくりたい。再生・終了箇所を指定して繰り返し聞きたかった。

 

ソリューションプラットフォームは Any CPU
f:id:koshinRan:20190511055003p:plain

 

 手順

  1.  [ ツール ] > [ ツールボックス アイテムの選択 ]
  2. [ COM コンポーネント ] タブをクリック。
  3. Windows Media Player にチェックを入れて OK。
    f:id:koshinRan:20190511054950p:plain
  4. デザインのツールボックスWindows Media Player が出現。
  5. デザインビューのフォームに配置する。

 

 

デザインに配置できなかった

ソリューションプラットフォームは Any CPU でなければ配置できなかった。

COM コンポーネントから Windows Media Player にチェックを入れて、
OK をクリックしたら以下のメッセージが。

次のコントロールツールボックスへ正常に追加されましたが、
アクティブなデザイナーで有効になっていません。

 

無視してツールボックスからフォームに貼り付けようとしたら
以下のメッセージが表示された。

コンポーネント 'AxHost' を生成できませんでした。
System.Reflection.ReflectionTypeLoadException:
要求された型のうち 1 つまたは複数を読み込めませんでした。詳細については、
LoaderExceptions プロパティを取得してください。
場所 System.Windows.Forms.Design.DocumentDesigner.AxToolboxItem. ~
場所 System.Drawing.Design.ToolboxItem.CreateComponentsCore ~
場所 System.Drawing.Design.ToolboxItem.CreateComponents ~
場所 System.Windows.Forms.Design.OleDragDropHandler. ~

 

プロジェクトは Windows フォームアプリケーション。
WPF アプリケーションで作成していないWPF はよく分からない。
WPFアプリケーションだと「ActiveX  コントロールをホスト」が必要になるらしい。

 

1 .
新たにプロジェクトを作成、
ソリューションプラットフォームは Any CPU のまま → 成功

WMPLib の「相互運用型の埋め込み」はそのまま。( true )
ここから ソリューションプラットフォーム を x64 に変更しても配置できる。

AxWindowsMediaPlayer の導入により WMPLib が参照に追加されると、
以下のような通知がされることがあるらしい。
  COM 参照 'WMPLib' は ActiveX コントロール 'AxWMPLib' の相互運用アセンブリですが、
  コンパイラによって /link フラグでリンクされるように設定されています。
  この COM 参照は参照として処理され、リンクされません。
これは、WMPLib のプロパティで [相互運用型の埋め込み] を false とすることで解決できる。

とあったので。

 

2 .
新たにプロジェクトを作成、
ソリューションプラットフォーム x64で実行してから配置 → 失敗

WMPLib の「相互運用型の埋め込み」を false にしても失敗。
Any CPU に戻しても配置できない。

 

f:id:koshinRan:20190511090402p:plain

 

 

x64 でエラーが出る原因

Windows フォームデザイナは 32bit で動く。
64bit でしか読み込めないようなライブラリ・アセンブリは貼り付けると
デザイナが表示できなくなるのが原因なもよう。

 

https://social.msdn.microsoft.com/Forums/ja-JP/7a071803-641e-4c09-8821-162e37313539/c12391activex124342035129992123771242712392124561252112540123951?forum=csharpgeneralja より。

まず、.NET の Windows フォームデザイナは 32bit で動きますので、
64bit でしか読み込めないようなライブラリ・アセンブリは貼り付けると
デザイナが表示できなくなります。
( devenv.exe 自体が 32bit であり、そのプロセス内にコンポーネント
を読み込む必要があるため )


たとえば、
ユーザーコントロールを作ってそれを含むプロジェクトが Any CPU ではなく、
x64 指定になっていると、デザイナで表示できません。
この場合、Any CPU として作り、デザイナでは 32bit、実行時は 64bit として
動作させるようにアセンブリを作らないといけません。

その性質を理解した上で構成をうまく作る必要があります。
私が示した例ではユーザーコントロールを含むプロジェクトを exe とは別に作り、
Any CPU にするといった手が考えられます。


次に、ActiveX などの COM コンポーネント .NET 上から使うためには、
相互運用アセンブリと呼ばれる COM の型をラップした .NET 型を含む
アセンブリが必要になります。
これはプラットフォームに依存する形となっており、
x86/x64 で別のアセンブリが生成されたはずです。
また、Visual StudioGUI からは構成 ( プラットフォーム ) ごとに参照する
アセンブリを切り換える機能は有していません。


これらのことから、64bit 向けのアプリとして作り込んで、
デザイナで表示するというのはかんたんにいかないのは確かだと思います。

  

 

 Windows Media Player をフォームに配置せずに再生できる

ユーザーインターフェイス必要なければフォームに配置する必要もない
button コントロールなど配置し、そのイベントハンドラで再生コードを書く。

 

だが、wmp.dll WMPLib.dll参照に追加する必要はある
フォームに Windows Media Player を一度配置すれば、
これらは自動的に追加される。

 

 

 

MediaPlayer クラスメモ

MediaPlayer クラスの説明が検索にかかって混乱した。

WPF におけるマルチメディア関係のクラス。
MediaElement クラスと MediaPlayer クラスがある。

MediaPlayer クラスは Windows Media PlayerWPF で使えるようにした、
いわゆるラップクラス。

MediaElement クラスは MediaPlayer クラスのサブクラスのようなもの。

基本的な機能に違いがあるわけではないが、
MediaElement クラスのほうは XAML コードで使うことを想定し、
MediaPlayer クラスは分離コードを使って操作することを前提としている。

 

 

 

 

こちらから。
http://www.gan.st/gan/blog/index.php?itemid=1406
https://social.msdn.microsoft.com/Forums/aspnet/ja-JP/4273b9f0-e561-4996-9978-9a19cc64a83e/windows-media-player?forum=wpfja
チュートリアル: WPF での ActiveX コントロールのホスト | Microsoft Docs https://teratail.com/questions/38031
AxWindowsMediaPlayer | C# プログラミング解説
https://dobon.net/vb/dotnet/programing/playmidifile.html
http://www.kanazawa-net.ne.jp/~pmansato/wpf/wpf_ctrl_multimedia.htm

以上。

---Memo---
System.Drawing を使うとき。
1.ソリューションエクスプローラーのプロジェクト名を右クリック。
2.[ 追加 ] > [ 参照 ] > 左メニューの アセブリをクリック。
3.System.Drawing にチェックを入れる。