質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

1164閲覧

Type.GetTypeFromCLSIDメソッドでServer名を指定するとエラーが発生します。

withcube159

総合スコア6

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/08/09 04:15

編集2019/08/09 04:20

前提・実現したいこと

使用言語:C#

Type.GetTypeFromCLSIDメソッドにServer名(IP Address)を指定して外部からのdll接続を可能にしようとしたんですが、Server名を指定するとローカルと外部両方全部接続ができない状態になってしまいます。
呼び出そうとしているdllはComponetではなくregsvr32を通じて登録したdllで’A’と言うパソコンに登録されています。
※dllが登録されていないパソコンは’B’。

A側でType.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]))使う場合は正しく動きますが

A、B側でType type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"127.0.0.1",false);を実行するとエラーメッセージが出ます。

例)
Type type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"127.0.0.1",false);
** Object co_Object = Activator.CreateInstance(type_info); ※この部分のtype_infoでエラーが発生します。**

エラーメッセージ :
[CLSID {XXXX-XXXX} を含むリモート コンポーネントの COM クラス ファクトリをコンピューター "127.0.0.1" から取得中に、次のエラーが発生しました: 80040154 127.0.0.1。]

この問題の解決方法を知っている方がいらっしゃったらぜひ解決方法を教えまてください。

発生している問題・エラーメッセージ

A側 : CLSID {XXXX-XXXX} を含むリモート コンポーネントの COM クラス ファクトリをコンピューター "127.0.0.1" から取得中に、次のエラーが発生しました: 80040154 127.0.0.1。

B側 :CLSID {XXXX-XXXX} を含むリモート コンポーネントの COM クラス ファクトリをコンピューター 192.168.0.139 から取得中に、次のエラーが発生しました: 80070005 192.168.0.139。

該当のソースコード

Type type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"127.0.0.1",false);
Object co_Object = Activator.CreateInstance**(type_info)**;「エラーメッセージ出る部分」

試したこと

コードの変更
A側:

1. 
Type type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"localhost",false);
Object co_Object = Activator.CreateInstance(type_info);

2. 
※ip_AddressはAのip_Addresです。
Type type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"192.168.0.221",false);
Object co_Object = Activator.CreateInstance(type_info);

 B側:

1. 
※ip_AddressはAのip_Addresです。
Type type_info = Type.GetTypeFromCLSID(Guid.Parse((string)input["confirm"]),"192.168.0.221",false);
Object co_Object = Activator.CreateInstance(type_info);

ソリューションプラットフォームの変更
1.ANYCPU
2. X64
3. X84

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

COM をネットワーク経由で呼び出すには、DCOM の設定が必要だったと思います。

もう忘れちゃってて、ろくな情報出せなくて申し訳ありませんが、
dcomcnfg でググってみてください。

投稿2019/08/09 06:37

KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

withcube159

2019/08/13 01:27

コメントありがとうございます。 コメントに書いてくださったようにdcomcnfgからターゲットになるオブジェクトのアクセス権限を変更しましたが、前と同じエラーメッセージが出ます。 (ユーザ(Everyone)を追加した後、アクセス権限を与えました。) 私が試した方法に何か間違ったところがあるのでしょうか?
KOZ6.0

2019/08/13 03:13

申し訳ないのですが、最近のOSでDCOMをどう動かせばいいのかは把握していません。 なにせ 20年前の技術ですから。 ただ、Windows ファイヤーウォールは当時ありませんでしたから、そのあたりが突破口になるのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問