C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

vb.netで作成したCOMをvb.netでCOMとして参照

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■93145 / inTopicNo.1)  vb.netで作成したCOMをvb.netでCOMとして参照
  
□投稿者/ まる (4回)-(2019/11/24(Sun) 10:23:28)

分類:[.NET 全般] 

お世話になっております。

VisualStudio2017,Framework4.7.1を使用しております。

VB.NETで作成したCOMのdllを、他のVB.NETのプロジェクトにて、dllとしてではなく、COMとして参照できる術はないかと考えております。

dllではなくCOMとして参照したい理由といたしましては、現在64bitのvb.netのアプリを開発しておりますが、
その中で参照して使用したいdllが32bitのものしかなく、こちらではコンパイルしなおしたり、作り直すことはできないもののため、困っておりました。
調べているうちに、32bitでも、COMであれば64bitから参照しても問題なく使用できる、といった記事がいくつかあったため、
COMのラッパーを作成して、そのCOMを64bitアプリが参照すればよいのではないか、と思い至りました。

vb.netでのCOMの作り方は以下を参考にして作成を試みましたが、MSDNには「VB.NETで作成したものは真のCOMではないため他のVB.NETでは作成できない」といったような注意書きがあり、実際、他のプロジェクトからCOMを参照しようとしたところ、そのような旨のエラーメッセージが出てきて読み込むことができませんでした。
参考URL:https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/com-interop/walkthrough-creating-com-objects

言語の問題かと思いC#でも作成を試みましたが、同じようなエラーが出てきてしまいました。
可能であれば、フレームワークを使用したvb.netやC#で、このようなことができるのが最善なのですが、
解決策についてご存知の方、もしくは、32bitのdllを64bitで使用する術についてご存知の方いらっしゃいましたら、
お知恵をお貸し頂けましたら幸いです。


説明不足な点がございましたら申し訳ございませんが、ご指摘いただけますと幸いです。何卒よろしくお願いいたします。
引用返信 編集キー/
■93146 / inTopicNo.2)  Re[1]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (47回)-(2019/11/24(Sun) 12:04:42)
No93145 (まる さん) に返信
> 調べているうちに、32bitでも、COMであれば64bitから参照しても問題なく使用できる、といった記事がいくつかあったため、
> COMのラッパーを作成して、そのCOMを64bitアプリが参照すればよいのではないか、と思い至りました。

Excel.exe のようなアウトプロセスの COM サーバーはビット数が違っていても呼び出せますが、インプロセスの場合はビット数が違うと呼び出せません。

アウトプロセスの COM ラッパーを作れば良いのですが、では .NET でどう作るかというと

「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」
https://support.microsoft.com/ja-jp/help/977996/how-to-develop-an-out-of-process-com-component-by-using-visual-c-visua

なんだか面倒くさそうです。

VB6 だと簡単にできちゃうんですけどね。

「カンタンOLEサーバー (ActiveX EXE)」
http://www.surveytec.com/prog/vb/kouza2/chap1.html

引用返信 編集キー/
■93164 / inTopicNo.3)  Re[2]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ とっちゃん (649回)-(2019/11/25(Mon) 11:08:46)
No93145 (まる さん) に返信

> dllではなくCOMとして参照したい理由といたしましては、現在64bitのvb.netのアプリを開発しておりますが、
> その中で参照して使用したいdllが32bitのものしかなく、こちらではコンパイルしなおしたり、作り直すことはできないもののため、困っておりました。
> 調べているうちに、32bitでも、COMであれば64bitから参照しても問題なく使用できる、といった記事がいくつかあったため、
> COMのラッパーを作成して、そのCOMを64bitアプリが参照すればよいのではないか、と思い至りました。
>
64bitプロセス内で 32bit の DLL をロード・実行する方法はありません(プログラム的にできないようになっているため)。
32bit<->64bitでやり取りする場合は、32bitDLLを使うプロセス(exe)を別に作成し、64bitプロセスとの間でプロセス間通信を行う必要があります。
このやり取りを総称して「プロセス間通信(IPC:Inter-Process Communications)」と呼びます。この中の一つに COM によるやり取りがあります。
とはいえ、.NET で COM を連携のために使うのはあまりお勧めはできないので、あえてほかの方法を提示しておきます。

実際はもっといろいろ種類があるのですが、プログラム連携という部分で比較的導入しやすいものを2つ挙げておきます。

1. パイプ(pipe)
https://docs.microsoft.com/ja-jp/dotnet/standard/io/pipe-operations?WT.mc_id=DT-MVP-32182

.NET アプリ同士だけでなく、Windows 上で動くプログラムであればほぼ種類を問わず使えるプロセス間通信の一つです。
匿名パイプと名前付きパイプの2種類があります。状況に応じてどちらを使うかは変わるのでどちらでも好きな方を使えばいいと思います。

2. WCF(Windows Communication Foundation)
https://docs.microsoft.com/ja-jp/dotnet/framework/wcf/?WT.mc_id=DT-MVP-32182

.NET Core への移植はコミュニティベースになってしまったため、本流からは外れてしまいましたが
.NET Framework ベースであれば現役で使えます。
.NET Remoting を使ったことがある場合は、こちらが直接的な後継にあたり、それなりに使ってみたな記事のあるので比較的とりかかりしやすい気がします。

引用返信 編集キー/
■93165 / inTopicNo.4)  Re[2]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ 魔界の仮面弁士 (2498回)-(2019/11/25(Mon) 11:26:49)
No93146 (KOZ さん) に返信
> アウトプロセスの COM ラッパーを作れば良いのですが、では .NET でどう作るかというと
> 「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」
> https://support.microsoft.com/ja-jp/help/977996/how-to-develop-an-out-of-process-com-component-by-using-visual-c-visua


》このコード サンプルをダウンロードするには、次のリンクをクリックします。
ダウンロード先が見当たらないと思ったら、記事が古すぎて
ダウンロードリンクが失われている模様…。
http://j.mp/34jnFkP


当時のリンク先は下記のようです。(C#, VB, C++)
http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/CSExeCOMServer.exe
http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/VBExeCOMServer.exe
http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/ATLExeCOMServer.exe
引用返信 編集キー/
■93177 / inTopicNo.5)  Re[3]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (50回)-(2019/11/26(Tue) 08:50:17)
No93165 (魔界の仮面弁士 さん) に返信
> 当時のリンク先は下記のようです。(C#, VB, C++)
> http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/CSExeCOMServer.exe
> http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/VBExeCOMServer.exe
> http://download.microsoft.com/download/A/5/1/A5144CA5-583A-4D6E-A1C9-52861CC2F9E7/ATLExeCOMServer.exe

おお、ありましたか。ありがとうございます。

私は
https://docs.microsoft.com/ja-jp/windows/win32/com/out-of-process-server-implementation-helpers?redirectedfrom=MSDN
ここをみて「めんどくせー」で終わってしまいました。

ダウンロードして見てみましたが、やっぱり面倒ですね。(^_^;)
引用返信 編集キー/
■93192 / inTopicNo.6)  Re[4]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ まる (5回)-(2019/11/27(Wed) 01:12:00)
お世話になっております。投稿者のまるです。
確認が遅れてしまい大変失礼いたしました。皆さま、コメント頂きましてありがとうございます。大変勉強になります。
まだ理解が追い付いていない点が多々あるため、おかしいことを言っている点もあるかと思いますが、どうかご容赦いただけますと幸いです。

遅ればせながら順次返信させて頂きます。


No93146 (KOZ さん) に返信
> アウトプロセスの COM ラッパーを作れば良いのですが、では .NET でどう作るかというと
> 「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」
> https://support.microsoft.com/ja-jp/help/977996/how-to-develop-an-out-of-process-com-component-by-using-visual-c-visua
KOZ さん、真っ先にコメント頂きましてありがとうございます。また、URLもご紹介頂きましてありがとうございます。
仮面弁士さんのおっしゃられていたように、ご紹介いただいたページをもとにソースコードを探したところ、仮面弁士さんが見つけたものと同じページを見つけ、作業が進むことができました。ありがとうございました。
(見つけたソースコードの動作確認に手間取っていたら返信が遅れてしまいました。失礼いたしました。)


No93164 (とっちゃん さん) に返信
> 実際はもっといろいろ種類があるのですが、プログラム連携という部分で比較的導入しやすいものを2つ挙げておきます。
> 1. パイプ(pipe)
> 2. WCF(Windows Communication Foundation)
とっちゃん さん、コメント頂きましてありがとうございます。
COM以外にもこのような方法があるのですね。存在自体をあまり存じておりませんでしたため、大変勉強になります。ご紹介頂きましてありがとうございます。
まだ詳しい内容はみていないのですが、COM作成が現在難航しているため、ご紹介頂いたこれらも併せて検討させて頂きたいと考えております。


No93165 (魔界の仮面弁士 さん) に返信
> ダウンロード先が見当たらないと思ったら、記事が古すぎて
> ダウンロードリンクが失われている模様…。
> 当時のリンク先は下記のようです。(C#, VB, C++)
魔界の仮面弁士 さん、コメント頂きましてありがとうございます。いつも大変お世話になっております。
ソースコードを見つけて頂きましてありがとうございます。ご紹介いただきましたソースコードを現在動作確認しておりますが、詰まっている部分がございます。
恐れ入りますが、その点について改めてご相談させて頂くことはできますでしょうか。
仮面弁士さんは勿論、他にご存知の方がいらっしゃいましたらお知恵をお貸し頂けますと幸いです。

ご紹介頂いたソースコードのうち、VBExeCOMServerのプロジェクトをダウンロードしてコンパイルしたところ、COM自体は問題なく登録されました。
ただ、他のvb.netのプロジェクトにて、参照設定のCOMリスト上からVBExeCOMServerを選択してOKを押下したところ、

"A reference to 'VBExeCOMServer' could not be added.

The ActiveX type library C:...\VBExeCOMServer.tlb' was exported from a .Net
assembly and can not be added as a reference.

Add a reference to the .Net assembly instead."

というエラーメッセージが出てCOMとして追加することはできませんでした。
調べたところ、以下のURLにて、vb.netで作成したCOMは真のCOMではないため参照できないようでした。

上記エラーに関する参考URL
https://bytes.com/topic/visual-basic-net/answers/497630-exposing-net-assembly-both-vb6-net-1-more-time

そこで、ActiveXにしたため、参照設定に追加しなくともCreateObjectで使用できるのではないか、と思い
参照設定せずにCreateObjectで使用を試みたところ、エラーもなく動作させることができました。

問題なのは、上記で動作したのは、メソッドとプロパティに関してのみであり、イベントは捕捉できていない、という点が問題となっております。
CreateObjectを使用して、getEventなどでイベントを取得してハンドルを結び付けられないか、と思案いたしましたが、
getEventでイベントを取得しようとしても、__COMObjectに対してgetEventしてしまう形になり、上手くgetEventで取得することができません。
以下のURLが、今の自分と同じ状況なのではないかと考えておりますが、このURLの回答がよく理解できておらず、解決が難航しております。

自身と似た状態にある質問のURL
https://www.pcreview.co.uk/threads/eventhandler-for-late-bound-com-object.3325560/

上記のページには、「インターフェイスの定義をCOMクライアントにコピーする必要があります。」といったような回答がありますが、
これが何を意味するのか、理解が追い付けておらず、もしこの意味が分かる方、もしくは
CreateObjectにて取得したObjectインスタンスに対して、イベントを取得する方法をご存知の方がいらっしゃいましたら
お知恵をお貸し頂くことはできますでしょうか。

申し訳ございません、あまり触れたことのない分野であったため少し混乱しており、説明不足な点などございましたらご指摘いただけますと幸いです。
何卒よろしくお願いいたします。
引用返信 編集キー/
■93193 / inTopicNo.7)  Re[5]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ 魔界の仮面弁士 (2499回)-(2019/11/27(Wed) 08:57:25)
No93192 (まる さん) に返信
> COMとして追加することはできませんでした。
ClassInterface 属性を付与していない(または AutoDispatch を指定する)と、
事前バインディングができませんので御注意ください。(実行時バインディングは可能)

ComVisible 属性で公開したクラスに対して、COM インターフェイスを明示的に Implements しておき、
そのクラスに <ClassInterface(ClassInterfaceType.None)> を付与してみてください。

もしくは実行時バインディング前提の利用で構わなければ、Interface は作らずに
<ClassInterface(ClassInterfaceType.AutoDispatch)> を指定するだけでも良いかと。


> そこで、ActiveXにしたため、参照設定に追加しなくともCreateObjectで使用できるのではないか、と思い
> 参照設定せずにCreateObjectで使用を試みたところ、エラーもなく動作させることができました。

.NET による ActiveX DLL 作成手順としては、このあたりが良くまとまっているかと思います。
http://j.mp/35DOyAw
https://qiita.com/tomochan154/items/1ce33f2aef167c0fed9d


> イベントは捕捉できていない、という点が問題となっております。

上記 URL にもありますが、事前バインディングの場合は、イベントインターフェイスを用意して、
それを ComSourceInterfaces 属性で指定するようにします。

実行時バインディングの場合、相手が VBScript なら VBS の GetRef 関数を使って
擬似デリゲートを割り当てる手法が使えます。GetRef で割り当てられたメソッドは、
AddressOf のような関数ポインタとしてではなく、既定のメソッドを持った COM オブジェクトとして
割り当てられるため、VB.NET 側からは DispId(0) に対するメソッド呼び出しでコールバックできます。

 CallByName( vbsからGetRefでSetされたオブジェクト, "[DispId=0]", CallType.Method, 追加の引数があればここに)
引用返信 編集キー/
■93198 / inTopicNo.8)  Re[5]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (53回)-(2019/11/27(Wed) 17:57:21)
No93192 (まる さん) に返信
> イベントは捕捉できていない、という点が問題となっております。

Excel の場合だと、レイトバインドでもイベントを補足できました。

http://kozhouse.homeip.net/dotnet/etc/15/

の ComEventCaster を取り込んで、

Imports System.Runtime.InteropServices

<ComVisible(True)>
Public Class AppEventCaster
    Inherits ComEventCaster

    Public Sub New(ByVal comObject As Object)
        MyBase.New(comObject)
    End Sub

    <DispId(1565)>
    Public Sub RaiseNewWorkbook(wb As Object) '名前は何でも良い。DispId が重要
        RaiseEvent NewWorkbook(wb)
    End Sub

    Public Event NewWorkbook(ByVal wb As Object)

End Class

を作ります。

使い方は

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim app As Object = CreateObject("Excel.Application")
        Using caster As New AppEventCaster(app)
            AddHandler caster.NewWorkbook, AddressOf App_NewWorkbook
            Dim wbs As Object = app.Workbooks
            Dim wb As Object = wbs.Add()
            app.Quit()
            Marshal.ReleaseComObject(wb)
            Marshal.ReleaseComObject(wbs)
        End Using
        Marshal.ReleaseComObject(app)
    End Sub

    Private Sub App_NewWorkbook(Wb As Object)
        Me.Text = Wb.Name
        Marshal.ReleaseComObject(Wb)
    End Sub

End Class



引用返信 編集キー/
■93258 / inTopicNo.9)  Re[2]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ まる (6回)-(2019/11/30(Sat) 20:32:37)
お世話になっております。まるです。

またもや返信が遅れてしまい申し訳ございません。順次返信させて頂きます。

No93193 (魔界の仮面弁士 さん) に返信
> .NET による ActiveX DLL 作成手順としては、このあたりが良くまとまっているかと思います。
> http://j.mp/35DOyAw
> https://qiita.com/tomochan154/items/1ce33f2aef167c0fed9d
> 上記 URL にもありますが、事前バインディングの場合は、イベントインターフェイスを用意して、
> それを ComSourceInterfaces 属性で指定するようにします。

ご紹介頂きましてありがとうございます。二つとも拝見させて頂きました。どちらも本当にわかりやすくて助かりました。
ComClassではなくこのような属性にする必要があったのですね…。大変勉強になりました。
ただ、ご紹介頂いた先に載っていた属性や、インターフェイスの実装などを行って再度事前バインディングを再度試みたのですが、
私のやり方が悪かったのか、前回と同じように、「直接参照する必要がある〜」といったエラーが
出て事前バインディングすることができませんでした。

もし、もしお時間があったらの範囲でなのですが、どなたか上記のVBExeCOMServerをダウンロードしていただき、属性を正しくつけることでVBExeCOMServerが他のvb.netのプロジェクトから事前バインディングできるのかどうか、恐縮ですがご確認いただくことなどはできますでしょうか。
何度もソースコードを見返し、ご紹介頂いた先の説明も全て読んで適用したはずなのですが、もしかしたら私のやり方が悪かっただけで、正しく実装すれば事前バインディングできるのでは、と希望を捨てられずにおります。
私が作成したソースコードを載せられれば最善だとは思うのですが、申し訳ございませんが、掲示板をいじる際には手元にソースコードがないため、載せることが難しい状態です。


> 相手が VBScript なら
> VB.NET 側からは DispId(0) に対するメソッド呼び出しでコールバックできます。
>  CallByName( vbsからGetRefでSetされたオブジェクト, "[DispId=0]", CallType.Method, 追加の引数があればここに)
申し訳ございません。vbsを使用する、という所が上手く呑み込めておらず、vb.netのプロジェクトで実行時バインディングとして使用するためには、vbsを経由する必要がある、ということでしょうか。(文章の読解が間違っておりましたら申し訳ございません)


No93198 (KOZ さん) に返信
> Excel の場合だと、レイトバインドでもイベントを補足できました。
このようなシンクというものを使用した方法があるのですね。ご紹介頂きましてありがとうございます。大変勉強になります。
ご紹介頂いたソースコードをもとに、VBExeCOMServerに適用するようにして実行してみたところ、adviseの部分で「値が有効な範囲にありません」とエラーが出てしまいました。
こちらでもエラーの意味について調べてみたのですが、私が調べた範囲では参考になりそうな記事を見つけることができませんでした。

このエラーの理由などについて、KOZさんは勿論、他にご存知の方がいらっしゃいましたら、ご教授頂くことはできますでしょうか。


よろしくお願いいたします。
引用返信 編集キー/
■93262 / inTopicNo.10)  Re[3]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (59回)-(2019/11/30(Sat) 22:10:53)
2019/12/01(Sun) 02:20:13 編集(投稿者)

No93258 (まる さん) に返信
> adviseの部分で「値が有効な範囲にありません」とエラーが出てしまいました。

このエラーには心当たりがないです。
AppEventCaster が Public でなければ InvalidCastException にはなりますが・・・
引用返信 編集キー/
■93264 / inTopicNo.11)  Re[4]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ Atata!! (1回)-(2019/11/30(Sat) 22:33:13)
2019/11/30(Sat) 22:47:06 編集(投稿者)
2019/11/30(Sat) 22:43:50 編集(投稿者)

> その中で参照して使用したいdllが32bitのものしかなく、こちらではコンパイルしなおしたり、作り直すことはできないもののため、困っておりました。

該当の DLL が .NET で作成されていないなら DllSurrogate を設定すれば解決する可能性があります。

以下のサイトの 3. サロゲートなCOMサーバ(local_server) の設定だけで適用可能かもしれません。
https://qiita.com/tanakah/items/0f70c974e2728279f7b6

他にも参考になるサイトがいくつかあるので、検索してみてください。



> 「Visual C++、Visual C#、または Visual Basic .NET を使用して、アウト プロセスの COM コンポーネントを開発する方法」

マイクロソフトが RegistrationServices.RegisterTypeForComClients を使用しないサンプルを提供しているのは謎ですが、
.NET にはアウトプロセスサーバーをサポートする機能があります。
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.registrationservices.registertypeforcomclients?view=netframework-4.8

私のサイトにサンプルを置いてありますので、参考にしてみてください。
http://atata.sakura.ne.jp/net/chap20.html


> ご紹介頂いたソースコードをもとに、VBExeCOMServerに適用するようにして実行してみたところ、adviseの部分で「値が有効な範囲にありません」とエラーが出てしまいました。

該当のイベントシンクの実装に若干問題があるため、COM Server 次第ではエラーとなる可能性があります。

EnumConnectionPoint.Next の呼び出しで戻り値のチェックに 0 以上を指定していますが、
S_FALSE を返却する COM Server に対しては While 文内に入ります。
また、AllocHGlobal は確保したメモリを 0 クリアしないため、
COM Server側でも 0 クリアされていない場合、
意図しない動作になると思います。



引用返信 編集キー/
■93265 / inTopicNo.12)  Re[5]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (60回)-(2019/11/30(Sat) 23:24:38)
No93264 (Atata!! さん) に返信
> EnumConnectionPoint.Next の呼び出しで戻り値のチェックに 0 以上を指定していますが、
> S_FALSE を返却する COM Server に対しては While 文内に入ります。

Excel 2003 だと S_FALSE が帰ってきます。
# 生憎、手元に 2003 しかないので他のバージョンで確認できません。

> また、AllocHGlobal は確保したメモリを 0 クリアしないため、
> COM Server側でも 0 クリアされていない場合、
> 意図しない動作になると思います。

むしろ、こちらが問題なのかもしれませんね。

enmcp.Next(cp.Length, cp, lpCount)

の前に

Marshal.WriteInt32(lpCount, 0)

を入れとくとよさそうですね。

ご指摘ありがとうございました。

引用返信 編集キー/
■93376 / inTopicNo.13)  Re[6]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ まる (7回)-(2019/12/08(Sun) 18:56:26)
お世話になっております。まるです。

コメントまでに一週間も空けてしまい大変申し訳ございませんでした。(私事都合により暫く掲示板にコメントする時間をとることができませんでした)

No93264 (Atata!! さん) に返信
> 該当の DLL が .NET で作成されていないなら DllSurrogate を設定すれば解決する可能性があります。
> 以下のサイトの 3. サロゲートなCOMサーバ(local_server) の設定だけで適用可能かもしれません。
> https://qiita.com/tanakah/items/0f70c974e2728279f7b6

> .NET にはアウトプロセスサーバーをサポートする機能があります。
> https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.registrationservices.registertypeforcomclients?view=netframework-4.8
> 私のサイトにサンプルを置いてありますので、参考にしてみてください。
> http://atata.sakura.ne.jp/net/chap20.html

Atataさん、コメント頂きましてありがとうございます。
ご紹介頂いた内容を一週間の間調査していたのですが、解決する前にチーム内から、この問題に対して時間がかかりすぎているので一旦保留にしよう、という
ことになってしまい、これ以上調査することができなくなってしまいました。コメント頂いた矢先に大変申し訳ございません。

そのため、一度このスレッドはAtataさんのご回答をもって解決済みとさせていただきたいと思います。
不完全燃焼のような結果となってしまい申し訳ございません。
後日、新たな問題が発生したら、改めてスレッドを立ち上げさせていただく予定です。
皆さま、お忙しい中有用な情報をコメント頂きまして、本当にありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ