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

解決


ゆた  2003-08-13 10:56:56  No: 4398  IP: 192.*.*.*

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

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

編集 削除
にしの  2003-08-13 11:19:13  No: 4399  IP: 192.*.*.*

フォームの「所有者」は「誰」なのでしょうか。
推測で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 12:38:01  No: 4400  IP: 192.*.*.*

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

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

編集 削除
にしの  2003-08-13 18:11:52  No: 4401  IP: 192.*.*.*

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

編集 削除
ゆた  2003-08-16 01:02:00  No: 4402  IP: 192.*.*.*

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

編集 削除