• ベストアンサー

「参照の追加」で追加したCOMオブジェクトのエラーについて

「参照の追加」で追加したCOMを、 DIM aa As New ~ Newでインスタンスを生成させたいのですが、エラーが発生して生成できません(--;) Try ~ Catchでエラーを調べた結果、 エラーコードは、「0x80040154」 メッセージは、「COMオブジェクトは有効でないか、登録されていません」 どうして、このエラーが発生するのかを教えて下さい m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.6

>質問の主旨が、あのエラーが出た時の対処方法ですので、 >不可能であれば、その理由が知りたいのです。 理由?一番最初に書いた、 >1.Newで指定しクラスのオブジェクトが直接作成不可能な場合。他のメソッド等で生成させるときなど。 ですね。 対処法は、ありません。というか、使用可能となる条件を満たしてくださいですね。 ご丁寧に、 >WMPSliderCtrl: Not Public. Internal object used by Windows Media Player. って書いてくれているとおり、MediaPlayerが内部的に使用しているから公開してないですよ、と。 インスタンスの生成に関して内部的な前提条件が何かあるんでしょう。非公開の。 非公開なんですから、使えたとしても、使えなかったとしても自己責任で。

tomo_bu
質問者

お礼

対処法、無いですよね、やはり…。 いろいろありがとうございました。

その他の回答 (5)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5
tomo_bu
質問者

お礼

スキン変更のサンプルは見つからなかったのですが、他のプレイヤーSDKがあったので、早速DLして試しています。 本当にいろいろありがとうございました。 質問の〆切りはもう少し待ちたいと思います。 質問の主旨が、あのエラーが出た時の対処方法ですので、不可能であれば、その理由が知りたいのです。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

オブジェクトブラウザ見てみると、 >WMPSliderCtrl: Not Public. Internal object used by Windows Media Player. >WMPPlaylistCtrl: Not Public. Internal object used by Windows Media Player. って書いてありますが。なんで無理矢理使おうとしてるんですか? >「参照の追加」で追加したCOMを、 ここの時点で間違えているような。 MediaPlayerって、ActiveXコントロールですよね。 フォームに貼り付けて使うもんですから参照の追加じゃないですね。 >他のメソッド等で生成ですが、メソッドでインスタンス生成する方法がわかりません。 で、貼り付けたオブジェクトのメソッドやプロパティがいろいろあるんでそこから調べていきましょう。

tomo_bu
質問者

補足

実際やろうとしているのは、スキンを作る様な事です。専用のSDKが見つからず、違った方法で試みている最中です。また、専用のSDKはライセンスが必要らしいのです。 フォームに貼り付けて、いろいろ調べました。 コントロールのプレイリストのメンバの中に、コンストラクタが見つかり、ようやくカスタマイズできる段階になりました。 スライダーのメンバですが、このコントロールの中には存在しませんでした(--;) Not Publicということで、無理矢理使うことになるのですが、何か方法があると思いたいです(^^ゞ あのエラーが出てしまったからには、やはり不可能ということなのでしょうか? 何度も申し訳ありません。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>COMの実体がインストールされていない場合ですが、 >SDKのDLLもインストールさせる場合もあるのでしょうか? >今まで、参照追加してそのまま使っていました。どうか、この詳細をお願いします。 「詳細をお願いします」は、こっちなんですが(^^;;。 SDKにもいろいろ種類があります。 なんというSDKをインストールして、その中のなんというDLLを参照設定して、なんと言うクラスのオブジェクトをNewしようとしてエラーになったんですか?

tomo_bu
質問者

補足

説明不足で申し訳ありませんでした。 SDK:Windows Media Player Ver9.0.0.2980 コンポーネント名:Windows Media Player パス:\WINDOWS\System32\wmp.dll 名前空間(クラスのようなもの?):WMPLib の中の、 WMPPlaylistCtrlClass WMPSliderCtrlClass 他 のクラスのインスタンスが生成できません。  宜しくお願いします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

1.Newで指定しクラスのオブジェクトが直接作成不可能な場合。他のメソッド等で生成させるときなど。 2.参照設定したのが*.tlbのファイルで、タイプライブラリだけあってCOMの実体がインストールされていない場合。 とかですかね。

tomo_bu
質問者

補足

ご回答ありがとうございました。 補足として、参照追加したものは、MSサイトでダウンロードしたSDKのDLLです。 オブジェクトが直接作成不可能である場合、これはもうどうしようもないのでしょうか? 他のメソッド等で生成ですが、メソッドでインスタンス生成する方法がわかりません。 COMの実体がインストールされていない場合ですが、SDKのDLLもインストールさせる場合もあるのでしょうか?今まで、参照追加してそのまま使っていました。どうか、この詳細をお願いします。

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

『COMオブジェクトで使われているのは Microsoft.VisualBasic.Collection ではなく、VBA.Collection であり、これらには互換性がないからです。』 とこちらには書かれています。 対処方法もかかれているみたいなので、参考にしてみてください。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5475&forum=7 MSのKBにも http://support.microsoft.com/default.aspx?scid=kb;ja;323737 BUGとして挙がっているようですが、同じ内容ですか?

tomo_bu
質問者

補足

ご回答ありがとうございました。 COMオブジェクトですが、自作ではなく、MSからダウンロードしたSDKにあるもの(dll)を参照追加したので、中身がいじれないです。 多分、追加する際に、何かすべきことがあると思うのですが、それがまったくわかりません。

関連するQ&A

  • オブジェクト参照がオブジェクト インスタンスに設定されていません  というエラーについて

    タイトルの「オブジェクト参照がオブジェクト インスタンスに設定されていません」についてですが、 このエラーは、 null を参照しようとして例外が発生している エラーだと解釈しているのですが、nullでないのに、このエラーが出る場合はどのように対処すればいいのか教えてください。 下記のような文があるとします。 Dim aaa as String 'aaaは、データベースからデータをとってきています。 If aaa IsNot DBNull.Value Then DropDownList.SelectedItem.Text = aaa.TrimEnd 'ここでエラー End If aaaは、NullではないのでIf文の中に入っていくのですが、DropDownListにデータを入れようとすると、タイトルのようなエラーが発生します。 デバッグでaaaの値を見ても、ちゃんとデータが入っているし、Nullではないのですが、なぜこのようなエラーが出るのかわかりません。 このエラーは他に違う意味があるのでしょうか? また、他に影響している部分があるのでしょうか? どなたか教えてください。 よろしくお願いいたします。

  • SetとNothingの存在意味?

    数値とオブジェクトの変数セットはそれぞれ、 Dim num as integer num = 5 Dim obj as Object set obj = new From set obj = Nothing ですが、 オブジェクトの場合でインスタンスを生成しない、単なる参照?別名? の場合はNothingは不要でしょうか? Dim obj as Object For x = 1 to 10 set obj = Form2 ' newとインスタンスを生成するのではなく、単なる参照  obj.Caption = str(x) & "回目" 'set obj = nothingは不要? Next x

  • ”オブジェクト参照がオブジェクト インスタンスに設定されていません。”って

    開発初心者で困っております。 VisualBasic2005、SQL Server2005Expressで開発しています。 DataGridViewのToolStripでフィルターを掛けたいのですが、フィルタの実行をすると、Dgvで行っているカラム1+カラム2の計算をしているSubプロシージャで”オブジェクト参照がオブジェクト インスタンスに設定されていません。”というエラーが出て中断します。 下記にソースを記載します。 (ToolStripフィルタ実行)----------------------------------------- Private Sub FillByDivToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FillByDivToolStripButton.Click If cmbDiv.Text <> "" Then Try Me.T_payscheduleTableAdapter.FillByDiv(Me.MoPDataSet.t_payschedule, cmbDiv.Text) ・・・ (Dgvの計算部分)------------------------------------------------- Private Sub T_payscheduleDataGridView_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles T_payscheduleDataGridView.SelectionChanged Dim iRow As Integer =Me.T_payscheduleDataGridView.CurrentCell.RowIndex() ←ここでエラー発生!! Dim iCol As Integer=Me.T_payscheduleDataGridView.CurrentCell.ColumnIndex() ・・・ ------------------------------------------------------------- エラーMsgを手掛かりに色々調べてはいるのですが解決の糸口がつかめません。よろしくお願いします。

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------

  • オブジェクトの消滅と関数の戻り値オブジェクト

    public sub test1() { dim hoge as classX = tes2() test2.getHogehoge() } public Function test2() as classX { dim ret As New classX("初期化") return ret } 大変簡略化してますが上記2つの関数があった場合 関数test1でclassX型のアドレスhogeに、test2()が返す classX型オブジェクトの参照を代入しています。 でこの実体というかインスタンスretはtest2()の中の スコープで消滅する自動変数として生成されています。 んで実際関数test2を抜けるときretのインスタンスは 破棄されるのにtest1ではそれをhogeアドレスに代入して 使用していいのでしょうか?

  • Visual Basic.NETのエラー("オブジェクト参照がオブジェクト インスタンスに設定されていません。")について

    DLLを読み込むプログラムで、以下のように宣言した関数"VCread_wave_file"を呼び出そうとすると、 "オブジェクト参照がオブジェクト インスタンスに設定されていません。" というエラーが出てしまうのですが、なぜなのでしょうか? プログラムは以下のようになっています。 Public Class Form1 Inherits System.Windows.Forms.Form Dim status As Integer Dim wavelength As Long Dim samplf As Double Private Declare Function VCread_wave_file Lib "Vcon.dll" (ByVal FileName As String, ByVal tmpFilename As String, ByVal wavelength As Long, ByVal samplingFrequency As Double) As Integer (中略) Private Sub ChangeStartButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChangeStartButton.Click status = VCread_wave_file("rectmp.wav", "rectmp.raw", wavelength, samplf) Label4.Text = status End Sub よろしくお願いいたします。

  • 「オブジェクトが必要です。」エラーになります。

    次のコードで2.は動くのですが、1.が動きません。「オブジェクトが必要です。」エラーになります。 何が違うんでしょうか? 教えてください。よろしくお願いします。 Function hoge(aa As Range) aa.Value = "Hello!!" End Function Sub Worksheet_Activate() Dim a As Range Set a = ThisWorkbook.Worksheets("Sheet1").Range("G10") hoge (a) ' ←1.これだとエラーになる ' hoge (ThisWorkbook.Worksheets("Sheet1").Range("G10")) ' 2.こちらはOK End Sub

  • オブジェクトとインスタンスはそれぞれあってますか?

    オブジェクトとインスタンスはそれぞれあってますか? vbaで Sub test() Dim CN As ADODB.Connection 【1】 Set CN = New ADODB.Connection  【2】 ・・・ それぞれ 【1】オブジェクトの作成 【2】インスタンスの作成 であってますか?逆ですか? 動作の名称を教えてください。

  • VB.net エラー「オブジェクト参照がオブジェクトインスタンスに設定されていません」

    タイトル通り『オブジェクト参照がオブジェクトインスタンスに設定されていません』というエラーが発生し、全く僕の脳では解決しないので、ここに質問させて頂きます。 VB.netでフォームロード時に、Accessに登録されている件数分だけテキストコントロールを動的に配置(配列処理をしています)、そこにAccessからデータを取り込みます。 追加ボタンで一件分のテキストコントロールを一番下の行になるよう配置。そこにユーザがデータを入力し、更新ボタンを押すことで、Access上にINSERTする。 というような処理です。 で、INSERTはされるのですが、その後textboxの中身を配列の最初から確認しようしたり、データを入れようとしたり、空にしようとしたりすると上のエラーが表示されます。 'テキストの配列' Private field_text(,) As System.Windows.Forms.TextBox Sub s_insert() ' ’ 更新ボタン時の処理 ' Const strinsert As String = "INSERT INTO 社員マスター (SNO,SNAME) VALUES (@sCode,@sName)" Dim oConn As New System.Data.OleDb.OleDbConnection Dim oCommand As New OleDbCommand Dim i As Integer Dim j As Integer Dim insert_ok As Integer 'DB接続のための処理(省略)      'SQL文の設定 oCommand.CommandText = strinsert insert_ok = 0 oCommand.Parameters.Add(New OleDbParameter("@sCode", OleDbType.Char, 10)) oCommand.Parameters("@sCode").Value = field_text(更新する行の値, 0).Text oCommand.Parameters.Add(New OleDbParameter("@syainName", OleDbType.Char, 20)) oCommand.Parameters("@sName").Value = field_text(更新する行の値, 1).Text insert_ok = oCommand.ExecuteNonQuery() 'SQL文を実行' If insert_ok > 0 Then MessageBox.Show("新規登録完了", "メッセージ") End If 'DB接続を閉じる処理(省略) For i = 0 To 登録行数 - 1 For j = 0 To 1 f_text(i, j).Text = ""  ←ここでエラー Next j Next i End Sub 随分と省いてあり、意味の分からない部分が多数あると思いますが、何か気付いたことや他の部分を書け!という場所があれば教えてください。 一日やっても解決せずに、本当に困り果てています。

  • デザイナ時のエラー「オブジェクト参照が…」??

    お世話になります。 VB2010です。 どのDatagridViewが選択されたかわかりやすいように 選択時にリッチテキストボックスを後ろに追加して、枠線があるかのように表現しています。 実行時の動きは問題なかったのですが、 デザイナで既存のDatagridViewを削除したときに 「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーが出ます。 また、なぜかDatagridViewを削除するとリッチテキストボックスが残像のように表示されます。 しかも選択しようとしても選択できません。選択できないので削除もできません。 デバッグで見てみてもリッチテキストボックス追加→削除は行われているのに、 なぜデザイナ時にこのエラーがでるのか&残像が出てくるのかわかりません。 どなたかヒントなどいただけると助かります。 よろしくお願いいたします。 ↓リッチテキストボックスの追加と削除 'Enter時 後ろにRichTextBoxを表示 Protected Overrides Sub OnEnter(ByVal e As System.EventArgs) MyBase.OnEnter(e) 'RichTextBox検索 Dim RTxtB As RichTextBox = Nothing For Each Con As Control In MyBase.Parent.Controls If Con.Name = "RTxtB_Shdw_" & MyBase.Name Then RTxtB = Con Exit For End If Next If RTxtB Is Nothing Then 'RichTextBoxなし→後ろにRichTextBoxを追加 RTxtB_Shdw = New RichTextBox() RTxtB_Shdw.Name = "RTxtB_Shdw_" & MyBase.Name RTxtB_Shdw.BorderStyle = Windows.Forms.BorderStyle.None RTxtB_Shdw.BackColor = Color.MidnightBlue RTxtB_Shdw.TabStop = False RTxtB_Shdw.Size = New System.Drawing.Size(MyBase.Width + 4, MyBase.Height + 4) RTxtB_Shdw.Location = New System.Drawing.Point(MyBase.Location.X - 2, MyBase.Location.Y - 2) Try MyBase.Parent.Controls.Add(RTxtB_Shdw) Catch ex As Exception End Try End If End Sub 'Leave時に後ろのRichTextBoxを削除 Protected Overrides Sub OnLeave(ByVal e As System.EventArgs) MyBase.OnLeave(e) 'RichTextBox検索 Dim RTxtB As RichTextBox = Nothing For Each Con As Control In MyBase.Parent.Controls If Con.Name = "RTxtB_Shdw_" & MyBase.Name Then RTxtB = Con Exit For End If Next If Not RTxtB Is Nothing Then 'RichTextBoxあり→削除 MyBase.Parent.Controls.Remove(RTxtB) RTxtB = Nothing End If End Sub

専門家に質問してみよう