COM呼出の際に発生する-2147417848エラーを解消するには?

解決


まむ  2006-09-07 01:05:02  No: 96516

開発環境は
VB6.0
WindowsXP SP2
です。

Exeプログラムから自前のCOMを呼んでファイル出力する処理を作っています。
困っているのは、COMのメソッドを呼び出すタイミングでエラーが発生します。

[Err.Number]-2147417848
[Err.Description]
オートメーション エラーです。
起動されたオブジェクトはクライアントから切断されました。 

デバッグモード(ExeプロジェクトにCOMプロジェクトを追加して実行)では
問題のメソッドを実行しても上記エラーは発生しません。
DLLにコンパイル、レジストして実行するとエラーが発生します。
COM側のメソッド内部の一番最初にログを吐き出すような処理を入れてみましたが、ログが吐き出されていないので、呼出時の記述ミスか何かが影響しているのではと、現時点では考えています。

下記サンプルのコードですが、どなたか原因がお分かりになる方がいらっしゃいますでしょうか。

【COM側】
Public Type typGeneratedXmlInfo
    strXmlFileName    As String     'XMLファイル名
    strErrModule      As String     'エラーモジュール
    lngErrNumber      As Long       'エラー番号
    strErrDescription As String     'エラー内容
End Type
Dim mtyp_clsXmlInfo()     As typGeneratedXmlInfo

Public Function M_XmlGenerate(ByVal para1 As String, _
                                  ByVal para2 As String, _
                                  ByVal para3 As String, _
                                  ByVal para4 As String, _
                                  ByVal para5 As String, _
                                  ByRef ptyp_clsXmlInfo() As typGeneratedXmlInfo) As Integer

(処理を記述)

End Function

【EXE側】

    'COMコンポーネントの宣言
    Set objComXml = CreateObject("AAA.clsBBB")
    Dim typXmlFileInfo() As typGeneratedXmlInfo

    'DB文字列セット
    objComXml.P_DBStr = "XXXXX"

    'XML生成メソッド呼出
    intRet = objComXml.M_XmlGenerate(p1,p2,p3,p4,p5,typXmlFileInfo)
    (↑このメソッドで上記エラーが発生)


あん  2006-09-07 07:40:52  No: 96517

COMだけをデバックしても
エラーはでませんか?


まむ  2006-09-08 02:08:30  No: 96518

あんさん、ありがとうございます。

お恥ずかしながら、COMの開発の際のデバッグは
EXEから呼び出す方法しか知らないのですが、
COM単体でデバッグすることは可能なのですか?
もし可能であればその方法を教えて欲しいのですが。。


あん  2006-09-08 02:16:09  No: 96519

COMのプロジェクトを
読み込んで実行です。
呼び出されるとデバック可能です。


まむ  2006-09-08 02:42:14  No: 96520

スタートアップの設定を「(なし)」にしているので
実行しても無反応です。
こちらのやり方が何か間違っているのでしょうか?


あん  2006-09-08 03:29:54  No: 96521

デバックの仕方から勉強しなおしてください


まむ  2006-09-08 04:09:44  No: 96522

おかげで別のデバッグの方法が分かりました。
ありがとうございます。

で、本題に戻りますがエラーは出ませんでした。
何かお分かりになりますか??


あん  2006-09-08 05:38:59  No: 96523

>COM側のメソッド内部の一番最初にログを吐き出すような処理を入れてみましたが、ログが吐き出されていないので、呼出時の記述ミスか何かが影響しているのではと、現時点では考えています。
ログはでましたか?


まむ  2006-09-08 18:15:41  No: 96524

ログは出ます。
最初にデバッグしたときと状況は同じです。


まむ  2006-09-09 05:38:33  No: 96525

上記について、

> Set objComXml = CreateObject("AAA.clsBBB")

の部分を
Dim objComXml As New AAA.clsBBB
もしくは
Dim objComXml As AAA.clsBBB
Set objComXml = New AAA.clsBBB
と修正したら実行できました。

CreateObjectで生成すると駄目なのは
COM側のプロパティなどの問題でしょうか?

どなたか助けてください!


まむ  2006-09-09 06:21:07  No: 96526

> CreateObjectで生成すると駄目なのは

すみません、正しくはアーリーバインドだとOKで、
レイトバインドだとNGのようです。
アーリーバインドの宣言でCreateObjectはOKでした。。


まむ  2006-09-09 06:24:26  No: 96527

大事なことを言い忘れていましたが、

Dim objComXml As Object
Set objComXml = CreateObject("AAA.clsBBB")

の形で実現させたいのです。
クラスの文字列の部分を動的に呼び出したいのです。

どうか、どなたかご教授お願いします!


まむ  2006-09-10 02:19:25  No: 96528

自己解決です。

ユーザー定義型を使っていたところをVariant型に修正して
実行してみたところ、正常にスルーしました。

どうやらレイトバインドをする場合は、
引数(戻り値も?)は通常のデータ型だけが使用可能のようです。
(私の理解が正しければ・・・)

下記、修正版です。

【COM側】
Public Type typGeneratedXmlInfo
    strXmlFileName    As String     'XMLファイル名
    strErrModule      As String     'エラーモジュール
    lngErrNumber      As Long       'エラー番号
    strErrDescription As String     'エラー内容
End Type
Dim mtyp_clsXmlInfo()     As typGeneratedXmlInfo

Public Function M_XmlGenerate(ByVal para1 As String, _
                                  ByVal para2 As String, _
                                  ByVal para3 As String, _
                                  ByVal para4 As String, _
                                  ByVal para5 As String, _
                                  ByRef ptyp_clsXmlInfo As Variant) As Integer

(処理を記述)

End Function

【EXE側】

    'COMコンポーネントの宣言
    Set objComXml = CreateObject("AAA.clsBBB")
    Dim typXmlFileInfo As Variant

    'DB文字列セット
    objComXml.P_DBStr = "XXXXX"

    'XML生成メソッド呼出
    intRet = objComXml.M_XmlGenerate(p1,p2,p3,p4,p5,typXmlFileInfo)

コメント頂いた あん さん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加