2016-10-18 34 views
0

私はいくつかの非常によく質問をしましたが、私が知りたかったものではないので、私は自分自身に尋ねることにしました。C++ | Windows - STLオブジェクトをDLLに渡す

std :: stringを関数(DLLから)に渡すべきではないことがたくさんありました。すべてがCRT、プラットフォームのバージョンなどと一致する必要がありますが、const * charを安全に渡すことができます関数とし、.dllの内部でstd :: stringを使用しますか?

私は驚くほど便利なC++の文字列がどれほど魅力的かを発見したので、それらを.DLLで使用したいのですが、ランタイムテンプレートなどのために.dllで使用するのが危険です。

私の質問は、主に.dllでstd :: stringを使用する「安全な」方法ですか?

答えて

1

内部で使用するのは完全に安全です。

そして、DLL境界をまたいでstd::stringを使用することについてあまり心配しないでください。パブリックインターフェイスでは使用できませんが、独自のプログラムでDLLを配布する場合は、両方を制御します。 1つのVSソリューション内の2つのVisual StudioプロジェクトにDLLとEXEの両方を持つことは非常に一般的です。これにより、同じプラットフォームバージョンなどで構築されます。

0

DLLインターフェイスでstd::stringを自由に使用できます。しかし、std::string境界問題を避けるために、同じstdライブラリでDLLとアプリケーションを構築する必要があります。

0

ABIは文書化されていませんので、は技術的にはです。コンパイラのバージョンによって変更することができ、コンパイラの設定に依存する可能性があります。

呼び出し元とDLLが同じバージョンのVisual C++でビルドされている場合は、安全な側にする必要があります。

しかし、これはパブリックインターフェイスでは使用できず、バージョン間で互換性を失うことになります(たとえば、コンパイラをアップグレードした後、新しいDLLでoder EXEを実行するなど)。

関連する問題