- ベストアンサー
VC++6で作成したDLLをVC++.NET2003から呼び出せますか
現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。 (プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。) そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。 VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。 それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> もし、原理的にVC++6のDLLをVC++.NETでも呼び出し可能なら、 呼び出すだけなら原理的には可能ですが、作り方次第では正しく動作しないと思います。 典型的なまずい例は、DLL側でmallocやnewなどで割付けたオブジェクトを呼び出し側で解放させる、またはその逆です。 結局のところ、DLLの作り方に強く依存しますので、想像だけではこれ以上分かりません。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
> プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。 その発生するエラーですが、VC++のバージョン間の相性に問題があるところまでははっきりしているのでしょうか? VC++6で簡単なサンプルコードを書いて動作を確認し、それをVC++.NET 2003に移植したときに動くのであれば、問題は別のところにある(単に使い方が間違っているとか)と思います。 普通は設計段階でこうした実験は行うと思いますが、ある程度開発が進んでから問題になったとのことなので、ちょっと気になりました。
お礼
>その発生するエラーですが、VC++のバージョン間の相性に問題があるところまでははっきりしているのでしょうか? まだ、判っていません。 >普通は設計段階でこうした実験は行うと思いますが、ある程度開発が進んでから問題になったとのことなので、ちょっと気になりました。 おっしゃる通りです。本来、開発のはじめの段階で、確認すべきだったのですが、他にやることが多くて、つい後回しになってしまいました。反省しています。 もし、原理的にVC++6のDLLをVC++.NETでも呼び出し可能なら、この問題なっているDLLを呼び出すDLLをVC++6で作成し、それをVC++.NET2003のC++から呼び出そうと思っているのですが、意味無いでしょうか。
- ArukuMail
- ベストアンサー率22% (115/510)
結論から言うと難しい・・・ 難しいと言ってもできないのではなくできるともいえないからです っというのが、そのDLLの目的がそれぞれだからです。 言ってしまえば、VC++6がターゲットなら それはそれで完結していると。 親切なメーカーなら 対応DLLを作ってくれることもあります
お礼
回答ありがとうございます。実際問題としては、メーカが対応してくれるかどうかになるかと思いますが、原理的には、可能だと考えて良いのでしょうか。非常にシンプルなDLL、例えば、引数AとBの和を戻り値として返すDLLをVC++6で作ったものを、VC++.NET2003で使用することは、可能なのでしょうか。
お礼
>呼び出すだけなら原理的には可能ですが、 このことが、判っただけでも収穫がありました。 これから、DLL側の仕様の確認をしようと思います。 ありがとうございました。