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

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

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

Re[2]: C#からVB6.0で作成したCOM(exe)の呼び出し方


(過去ログ 100 を表示中)

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

■59746 / inTopicNo.1)  C#からVB6.0で作成したCOM(exe)の呼び出し方
  
□投稿者/ R (1回)-(2011/06/06(Mon) 09:37:41)

分類:[C#] 

お世話になっております。Rと申します。

タイトル通りなのですが、VB6.0で作成したexeをC#で使用したいです。
現状のソースコードは以下のようになっています。(一部分省略)


        // クラス変数
        OutSideCOM.OutSideClass m_os;

        /// <summary>
        /// 初期化
        /// </summary>
        public static void OutSideClass_Initialize()
        {
            // クラスタイプの取得
            Type classType = Type.GetTypeFromProgID("OutSideCOM.OutSideClass");

            //インスタンスを作成する
            object obj = Activator.CreateInstance(classType);

            //キャスト
            m_cnnt = (OutSideCOM.OutSideClass)obj;
        }


このソースで実行してみると。

「CLSID {(GUID)} を含む COM コンポーネントのインスタンスを IClassFactory から作成中に、次のエラーが発生しました: 800a005b。」

と言った例外が発生してしまいます。
エラーの意味もわからず困惑しています・・・
どうかお力をお貸しください。

引用返信 編集キー/
■59750 / inTopicNo.2)  Re[1]: C#からVB6.0で作成したCOM(exe)の呼び出し方
□投稿者/ 魔界の仮面弁士 (2196回)-(2011/06/06(Mon) 10:02:32)
No59746 (R さん) に返信
> タイトル通りなのですが、VB6.0で作成したexeをC#で使用したいです。
ActiveX EXE なのですね。

> 現状のソースコードは以下のようになっています。(一部分省略)
VB6 側はどうなっていますか?

> Type classType = Type.GetTypeFromProgID("OutSideCOM.OutSideClass");
m_cnnt = new OutSideCOM.OutSideClass();
もしくは
m_cnnt = new OutSideCOM.OutSideClassClass();
のように記述した場合はどうなりますか?


> 「CLSID {(GUID)} を含む COM コンポーネントのインスタンスを IClassFactory から作成中に、
> 次のエラーが発生しました: 800a005b。」
800a005b は、VB 側でいうと「実行時エラー 91」のことですね。
メッセージ表記では、
 『オブジェクト変数または With ブロック変数が設定されていません。』
 『Object variable or With block variable not set』
だと思います。

VB6 側で、(On Error 等で)エラーを握りつぶしている箇所はありませんか?
引用返信 編集キー/
■59751 / inTopicNo.3)  Re[2]: C#からVB6.0で作成したCOM(exe)の呼び出し方
□投稿者/ R (2回)-(2011/06/06(Mon) 11:22:12)
No59750 (魔界の仮面弁士 さん) に返信

早速のご返事ありがとうございます。
解決しまったのですが原因はVB6.0側の記述記述ミスでした。

VB6.0内で
data = New OutSideClassData
のところで先頭にSetがついていなかったのがエラーの原因でした。

魔界の仮面弁士 さんの
> 800a005b は、VB 側でいうと「実行時エラー 91」のことですね。
> メッセージ表記では、
>  『オブジェクト変数または With ブロック変数が設定されていません。』
>  『Object variable or With block variable not set』
> だと思います。

の所から気つかされました。
初歩的な記述ミスでお時間を取らせて申し訳ありません...
大変助かり、ありがとうございました。

> ■No59746 (R さん) に返信
>>タイトル通りなのですが、VB6.0で作成したexeをC#で使用したいです。
> ActiveX EXE なのですね。
>
>>現状のソースコードは以下のようになっています。(一部分省略)
> VB6 側はどうなっていますか?
>
>> Type classType = Type.GetTypeFromProgID("OutSideCOM.OutSideClass");
> m_cnnt = new OutSideCOM.OutSideClass();
> もしくは
> m_cnnt = new OutSideCOM.OutSideClassClass();
> のように記述した場合はどうなりますか?
>
>
>>「CLSID {(GUID)} を含む COM コンポーネントのインスタンスを IClassFactory から作成中に、
>>次のエラーが発生しました: 800a005b。」
> 800a005b は、VB 側でいうと「実行時エラー 91」のことですね。
> メッセージ表記では、
>  『オブジェクト変数または With ブロック変数が設定されていません。』
>  『Object variable or With block variable not set』
> だと思います。
>
> VB6 側で、(On Error 等で)エラーを握りつぶしている箇所はありませんか?
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -