COM相互運用の登録がグレーになってしまいます への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/11/10 16:15:18
> 仕方なくFontFamilyのNameを取り出す過程(下記)で
FontFamilyName を得るために、VBA から PrivateFontCollection を呼び出したいという事でよろしいでしょうか。
ライブラリを作るという方針からは外れますが、とりあえず直訳的にはこんな感じになります。
https://gist.github.com/Benshi/abc4bc939306603416ff6d82041bd0af
# すみません。投稿した後で何度か間違いを見つけて再投稿していましたが、
# 削除を繰り返すのも迷惑なので、コード本体は GitHub Gist に置くようにしました。
FontFamilyName を得るために、VBA から PrivateFontCollection を呼び出したいという事でよろしいでしょうか。
ライブラリを作るという方針からは外れますが、とりあえず直訳的にはこんな感じになります。
https://gist.github.com/Benshi/abc4bc939306603416ff6d82041bd0af
# すみません。投稿した後で何度か間違いを見つけて再投稿していましたが、
# 削除を繰り返すのも迷惑なので、コード本体は GitHub Gist に置くようにしました。
投稿者 (削除されました)  ()
投稿日時
2021/11/10 09:15:04
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2021/11/10 00:53:31
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2021/11/10 00:45:32
(削除されました)
投稿者 snowmansnow  (社会人)
投稿日時
2021/11/8 20:18:29
こんばんは、魔界の仮面弁士様、るきお様
.NET 5のクラスライブラリのサンプル動かせました。
真似できるかわかりませんが、がんばります。
>.NET を
>NET と表記することに
>違和感
ごめんなさい。何回も注意されてます。
>32bit 版と 64bit 版
注意して、別々に作ります。(今回はx86で作ってみました)
先日のフォントの続きで、
魔界の仮面弁士様がGekka様のName使えますよ。と仰ってくれたのですが、
自力で使えませんで、
仕方なくFontFamilyのNameを取り出す過程(下記)で、クラスライブラリを作りたくなりました。
Imports System.Drawing
Imports System.Drawing.Text
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'PrivateFontCollectionオブジェクトを作成する
Dim fontCol As New System.Drawing.Text.PrivateFontCollection()
fontCol.AddFontFile("C:\Users\Y2\AppData\Local\Microsoft\Windows\Fonts\ipamjm.ttf")
'https://dobon.net/vb/dotnet/graphics/privatefontcollection.html
'PrivateFontCollectionに追加されているフォントの名前を列挙する
For Each ff As System.Drawing.FontFamily In fontCol.Families
ListBox1.Items.Add(ff.Name)
'https://www.adonetvb.com/DotNet/refItemsAdd.html
Next
TextBox1.Text = ListBox1.Items(0)
'https://turtle-engineers.com/vb-listbox-count/
End Sub
End Class
これを改造して、フォントファイルの名前を取り出そうとしました。
るきお様のWEBは、.NET Coreでしたので、そちらも今回頂いたサンプル(インターフェース)で、
できるのではないかと思い、そちらもチャレンジしてみたいです。
時間がございましたら、Gekka様のNameについても御教授頂きたいです。
御2人ともありがとうございます。
勉強になります。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/11/8 12:09:52
.NET を
NET と表記することに
違和感がありますが、それはさておき。
NET と表記することに
違和感がありますが、それはさておき。
> エクセル(2016 64bitと32bit)から呼び出すクラスライブラリを作りたかったです。
32bit 版と 64bit 版とで別々にビルドする必要があります。
ひとまず、.NET 5 製の COM ライブラリ "ClassLibraryNet5" を作ってみました。
細かい手順は、るきおさんが紹介されている URL をご覧ください。
https://gist.github.com/Benshi/4b73898bf4da515fb643e99909e1e298
> NET Farmework 4.8 に戻すには、どうすればいいのでしょうか?
.NET / .NET Core 系のライブラリ プロジェクトと
.NET Framework 系のライブラリ プロジェクトは別管理になるので
プロジェクト ファイル自体は作り直しになります。
その上で、ターゲットフレームワークの選択肢に 4.8 はありますか?
無い場合は、Visual Studio Installer で VS2019 の [変更] を押して
[個別のコンポーネント] から .NET Framework 4.8 を選択します。
あるいは下記から Developer pack と日本語 Language Pack を入手してください。
https://dotnet.microsoft.com/download/dotnet-framework
> ターゲットフレームワークがNET 5.0になった今は?、グレーのままです。
その現バージョンの .NET 5 (現在 5.0.11) は、半年後の来年 5 月にサポート期限を迎えてしまうのですよね…。
一つ前のバージョンとなる .NET Core 3.1 (現在 3.1.9) は LTS なので、来年 12 月末までサポートされるのですけれども。
最新の LTS となる .NET 6 が、13時間半後の「本日 25 時半」(火曜日午前01:30)に
リリースされる予定で、今後はこちらのバージョンがお奨めです。2024年11月までサポートが続きます。
> 久しぶりにVisualStudio2019でクラスライブラリを作ろうと思ったのですが、
そして VS2019 は、2029年4月までのサポートです。(ただしバージョン 16.11.x 系統のみが対象)
> NET Coreやパッケージも今後やって行きたいです。
.NET Framework の更新はもう行われないので、.NET Core 系に進むべきではあるのですが
VB の言語進化は止まってしまったので、VB を使う限り、.NET 系の新機能のほとんどは
享受できないんですよね…。
VB16.0 から VB16.9 への更新として、init-only property を利用できるようにはなりましたが、
あれも「呼び出せる」ようになっただけで、そういうプロパティを VB で作れるわけでは無いですし。
投稿者 snowmansnow  (社会人)
投稿日時
2021/11/8 08:34:55
おはようございます、るきお様
お返事ありがとうございます
エクセル(2016 64bitと32bit)から呼び出すクラスライブラリを作りたかったです。
NET Coreやパッケージも今後やって行きたいです。
NET Farmework 4.8 に戻すには、どうすればいいのでしょうか?
リストボックスの、他の~をインストールする。
で、出てくるWEBの4.8の何をインストールすれば
NET Farmework 4.8 で作れるようになるでしょうか?
昔のクラスライブラリのNET 4.7がそのままだったので、既に入っている気もするのですが、
NET Farmework 4.8の選び方、御教授お願いしたいです
よろしくお願いします
投稿者 るきお  (社会人)
投稿日時
2021/11/7 21:36:17
最近 COM を使おうとしたことがなかったので気が付きませんでした。確かにグレーアウトされていますね。
少し試したところ .NET 5 のクラスライブラリではグレーアウト、.NET Farmework 4.8 のクラスライブラリではOKでした。
.NET Core/.NET 5以降だと、従来とやり方が違うからでしょうか?私もよくわかりませんが、ひとまず、.NET CoreをCOMとして呼び出し可能にする記事はここにありました。
https://docs.microsoft.com/ja-jp/dotnet/core/native-interop/expose-components-to-com
>何が原因で、どうすればクラスライブラリを従来のように、
>各種アプリ(コンソールとかフォームアプリとか、クラスライブラリとか)から
>クラスライブラリが出来るようになるのでしょうか?
ちょっと肝心のご質問がわかりにくかったのですが、
各種アプリからクラスライブラリを呼び出したいのであれば、COMにする必要はありません。むしろCOMにしない方がベターです。
直接.NETのコンポーネント(アセンブリ)としてビルドして参照設定をするのが通常です。NuGetなどのパッケージを経由する方法もあります。
詳しくはこちらで説明しています。
https://www.umayadia.com/VBStandard2/Standard33.htm
この、「COM相互運用機能の登録」が必要になるのは、非.NETの世界(ExcelやVBScriptなど)から、.NETを呼び出す場合です。
少し試したところ .NET 5 のクラスライブラリではグレーアウト、.NET Farmework 4.8 のクラスライブラリではOKでした。
.NET Core/.NET 5以降だと、従来とやり方が違うからでしょうか?私もよくわかりませんが、ひとまず、.NET CoreをCOMとして呼び出し可能にする記事はここにありました。
https://docs.microsoft.com/ja-jp/dotnet/core/native-interop/expose-components-to-com
>何が原因で、どうすればクラスライブラリを従来のように、
>各種アプリ(コンソールとかフォームアプリとか、クラスライブラリとか)から
>クラスライブラリが出来るようになるのでしょうか?
ちょっと肝心のご質問がわかりにくかったのですが、
各種アプリからクラスライブラリを呼び出したいのであれば、COMにする必要はありません。むしろCOMにしない方がベターです。
直接.NETのコンポーネント(アセンブリ)としてビルドして参照設定をするのが通常です。NuGetなどのパッケージを経由する方法もあります。
詳しくはこちらで説明しています。
https://www.umayadia.com/VBStandard2/Standard33.htm
この、「COM相互運用機能の登録」が必要になるのは、非.NETの世界(ExcelやVBScriptなど)から、.NETを呼び出す場合です。
投稿者 snowmansnow  (社会人)
投稿日時
2021/11/7 18:59:52
すいません。言語はVBで作ろうとしていました。C#はまだ試していません。
投稿者 snowmansnow  (社会人)
投稿日時
2021/11/7 18:58:07
こんばんは、るきお様、魔界の仮面弁士様、皆様
しばらく体調不良、業務繁多でした。
久しぶりにVisualStudio2019でクラスライブラリを作ろうと思ったのですが、
コンパイルタブ下部の、COM相互運用の登録がグレーになってしまいます。
ウィンドウズフォームアプリケーション(VB)で、
アプリケーションタブのアプリケーションの種類をクラスライブラリにすると、
コンパイルタブ下部の、COM相互運用の登録が従来は出来たのですが、
ターゲットフレームワークがNET 5.0になった今は?、グレーのままです。
他のWEBで、クラスライブラリ(VB)で作れば、選択できる⇒できたという記事があったのですが、
私の環境では、それもダメでした。Microsoft Visual Studio Community 2019 Version 16.11.5
過去のクラスライブラリを開いてみると、それは、COM相互運用の登録が出来ていて、
ターゲットフレームワークがNET 4.7でした。
何が原因で、どうすればクラスライブラリを従来のように、
各種アプリ(コンソールとかフォームアプリとか、クラスライブラリとか)から
クラスライブラリが出来るようになるのでしょうか?
よろしくお願いします
こんばんは、魔界の仮面弁士様、るきお様、皆様
VBAで、凄いです!!
クラスライブラリの例も凄かったのですが、凄いです。
この例が無かったら、フォントのファイルが同じなのに、名前やファミリが違う事に
気づきませんでした!!
もっと勉強して、皆さんの回答を自分のものにできるようにしたいと思います。
大変ありがとうございます。