- PR -

RUNDLL32.EXEは.netクラスライブラリDLL実行できますか?

投稿者投稿内容
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-03-19 13:27
一応
[INFO] Windows の Rundll と Rundll32 インターフェイス
http://support.microsoft.com/kb/164787/ja

より
引用:
16 ビットまたは 32 ビットの DLL からエクスポートされた関数を呼び出すことができます


とあります。
C#で作成したクラスライブラリはそれに該当しないように思えるのですけど。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-19 21:43
 マニュアルを元に、「こうやったらできるだろう」と答えることもあります。今は必要ないけど、そのうち必要になるだろうからウォッチしていることもあります。なので、実際にできたのかどうか、教えて欲しいんですよね。


 で、今まで、それをされていない。今までの実績から、あなたには教えたくない。これが本音。


 Blueさんの記事を元に、「COM 相互運用」あたりで検索をかければ、見つかると思いますよ。
_________________
crow
ベテラン
会議室デビュー日: 2006/09/13
投稿数: 67
投稿日時: 2007-03-20 10:32
参考になりました、有難うございました。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 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 ]

スキルアップ/キャリアアップ(JOB@IT)