- - PR -
RUNDLL32.EXEは.netクラスライブラリDLL実行できますか?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-19 13:27
一応
[INFO] Windows の Rundll と Rundll32 インターフェイス http://support.microsoft.com/kb/164787/ja より
とあります。 C#で作成したクラスライブラリはそれに該当しないように思えるのですけど。 | ||||
|
投稿日時: 2007-03-19 21:43
マニュアルを元に、「こうやったらできるだろう」と答えることもあります。今は必要ないけど、そのうち必要になるだろうからウォッチしていることもあります。なので、実際にできたのかどうか、教えて欲しいんですよね。
で、今まで、それをされていない。今までの実績から、あなたには教えたくない。これが本音。 Blueさんの記事を元に、「COM 相互運用」あたりで検索をかければ、見つかると思いますよ。 _________________ | ||||
|
投稿日時: 2007-03-20 10:32
参考になりました、有難うございました。
| ||||
|
投稿日時: 2007-03-20 12:41
つい最近、Java から .NET で作成されたクラスライブラリを呼ぶ必要があって似たようなことをしました。
結論からすると C# では無理だと思います。COM 相互運用はクラスを COM として公開するためのものでインスタンスメソッドの呼び出しはできますが、スレ主の求めているスタティックメソッドの呼び出しはできなかったように思います。 で、RUNDLL32.EXE から呼び出すためには Blue さんが示されている通り、特定のシグネチャで関数をエクスポートする必要があるんですね。これは C# ではなく managed C++ でなら可能だと思います。 Java 界隈では、JNI (Java Native Interface) 用DLL を managed C++ でも書ける、managed C++ で受け口だけ作れば内側は C# でも問題ない、というような話題で一部盛り上がっているとかいないとか。 なので、どうしてもということであれば、managed C++ で受け口を作るのが良いかと思います。 [追記] インスタンスの生成、インスタンスメソッドの呼び出しができるのは COM クライアント(身近だと VB6 とかですね。)から呼べるという意味です。RUNDLL32.EXE からは COM 相互運用アセンブリに対してインスタンスの生成、インスタンスメソッドの呼び出しをおこなうことはできません。 [/追記] [ メッセージ編集済み 編集者: 未記入 編集日時 2007-03-20 12:44 ] |