- - PR -
C#→ASP.NET 時のMFC_DLLコールの方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-11-29 10:20
初めて投稿させて頂きます。今後ともよろしくお願いします。
早速ですが、 今、C#でASP.NETWebアプリケーションで MFCで作成したDLLをコールする方法はどうしたらよいのでしょうか? 通常、下の記述のようにすればいいと思うのですが、 [DllImport("myDll_Test1.DLL", CharSet=CharSet.Ansi)] public static extern int testMessage( StringBuilder ansMes ); 呼ぶことができません。 参照設定など、他の方法で DLL側を変更しても、インターフェースが変わらなければ 呼び側をリビルドしないですむ方法がありましたら、あわせて教えてください。 よろしくお願いします。 | ||||
|
投稿日時: 2003-11-29 20:00
「呼ぶことができません」ということから、
・セキュリティーの問題でコールできない ・パスが通っていないのでコールできない ・DLLの作り方がまずいのでコールできない ざっと3つ考えられるのですが、どれが発生していますか?エラー番号やエラーメッセージは記述していただけないと、何が発生しているのか、選択肢が多すぎて困ります。 | ||||
|
投稿日時: 2003-11-29 22:15
返答ありがとうございます。 言葉足らずですみません。。 テスト方法としては、用意したDLLをWebフォームからボタンを押すと ただ呼ぶだけの処理を作成して、 StringBuilder s = new StringBuilder("aaa"); testMessage( s ); のようにコールしているのですが、 ボタンを押した後に、ブラウザの次画面を探している最中で 下のゲージが止まって見える状態(重いページを開いているときのような状態) になってしまいます。 DLLの場所は http://localhost/myDLL/myDll_Test1.DLL コールするプログラムは http://localhost/WebApplication2/WebForm1.aspx にあります。 ・セキュリティーの問題の場合、どこを注視すればよいでしょうか? ・パス設定を行う必要があるのでしょうか? ・DLLの作り方については、MFC→MFC.DLL はOKです。 よろしくお願いします。 | ||||
|
投稿日時: 2003-11-30 08:38
こんにちわ。諸農です。
ASP.NETでのセキュリティについては良くわからないのですが、 問題の切り分けとして以下のことを試されてみてはいかがでしょうか。 1.Windowsフォームアプリから、当該のDLL関数を正常に呼べるかどうか。 このときDLLがWindowsフォームアプリと同じフォルダに存在しない場合、 DLLの存在場所に対して環境変数のパスが通っていなければ呼び出せません。 #仮想ディレクトリも別々になっているようですので、このあたりが 問題になっているのかもしれませんね。 (Jittaさんご指摘の2番目の問題を解決する必要あり) 2.DLLのパスが解決できているとして、Winフォームアプリケーションからの 関数呼び出しは正常に終了しているか、失敗しているかどうか。 #呼び出しが失敗しているのであれば、DLL関数のプロトタイプの指定を 変更する必要があるかもしれません。 また、DLL関数内部の処理を見直す必要があるかもしれません。 (Jittaさんご指摘の3番目の問題を解決する必要あり) 3.ASP.NETでのセキュリティ、パスの問題について調査・検討に入る (Jittaさんご指摘の1番目の問題を解決する必要あり) ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2003-11-30 12:50
返答ありがとうございます。
MFC→LoadLibraryでの関数コールはできました。 いろいろな所において(同一フォルダ含む)をやったのですが、やはり前回同様の 状態になってしまいます。 やりたいことは 静的にリンクしてDLLをコールするのではなく、 動的に前のCの様に(LoadLibraryみたいに)コールしたいです。 DLLはMFC、WEBフォームはC#… 簡単にできる方法を教えてください。。 「教えてください」ばかりで申し訳ありませんが、よろしくお願いします。 | ||||
|
投稿日時: 2003-11-30 14:39
こんにちわ。諸農です。
なにか勘違いされている、または、こちらの意図が 伝わっていないようですが。。。 LoadLibraryってネイティブアプリでの利用方法であって、 しかもDLLのパス指定で行いませんか?? .NETでのDLL関数の呼び出しについての次のトピックは 参考になりませんか? 「アンマネージ DLL 関数の処理」 ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html/cpconconsumingunmanageddllfunctions.htm ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2003-12-03 20:35
返答ありがとうございます。
HPを参考にもう少し、がんばってみます。 ありがとうございました。(解決時には返答します。。) | ||||
|
投稿日時: 2003-12-04 09:07
この「testMessage」というのがDLL内の関数ですね。それでは、この関数は何をしますか?もしかして、メッセージウインドウを表示して、OKボタンがクリックされるまで待つ、とか? |