DLLからWindowsMediaPlayerコンポーネントを使用するには?

解決


ゆた  2003-08-13 19:56:56  No: 4398

DLLからフォームを呼び出してMediaPlayerをActiveXで使おうと思うんですが、
呼び出すとページ違反で終了します。

どうすれば使用できますか?


にしの  2003-08-13 20:19:13  No: 4399

フォームの「所有者」は「誰」なのでしょうか。
推測で2通り書いてみます。

アプリケーションが、DLLをLoadLibraryして、その中で(Application側が呼び出そうと、DLL側が呼び出そうとどちらでも)、「DLLが持っているフォーム」を呼び出している場合。
アプリケーションのApplicationオブジェクトと、DLLのApplicationオブジェクトが違うために、フォームの所有者が変わるためうまく動かないのだと思います。
DLLに初期化関数を用意して、アプリケーション側のApplicationを渡して、DLL側でApplication変数に渡されたオブジェクトを入れればよろしいかと思います。

アプリケーションが、DLLをLoadLibraryして、DLL側の関数から、アプリケーション側のフォームを呼び出している場合。
アプリケーション側とDLL側のFormの定義は同じでしょうか。
同じでなければ、アプリケーション側のフォームを、DLL側から操作することはできません。
# すでにある同じプロパティなどは操作可能です
アプリケーション側で、Formを操作するラッパー関数をexportしておき、それを呼び出すようにするのが簡単です。
もし、このあたりに問題がなければ、アプリケーション側でOleInitializeしていますか?
していないとActiveXがうまく動かないかもしれません。


ゆた  2003-08-13 21:38:01  No: 4400

フォームの所有者はDLLです。
DLLに含まれるフォームを呼び出して使っています。

1つ目の方法でDLLを作った場合、他言語から呼び出すことは可能でしょうか?


にしの  2003-08-14 03:11:52  No: 4401

DLLのフォームを、DLL内だけで完結していれば大丈夫だと思います。
# Delphiの場合、リンクするライブラリが同じなのが問題だったはず。


ゆた  2003-08-16 10:02:00  No: 4402

無事DLL内のフォームにMediaPlayerコントロールを使用することが出来ました。
ありがとうございました。


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

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






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