DLLはC++非対応:メモ
なんと!DLLはC++非対応
UNIX/LinuxでC++での開発を行ってきた人間にとって
腰を抜かすほど驚くべきことですが、何と!
DLLはC++非対応
なのです。
MicroSoftの不誠実極まりない説明ではC++を使った次のような 例を載せています。
// 以下マイクロソフトのチュートリアルページからコメントを外し引用
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
namespace MathFuncs
{
class MyMathFuncs
{
public:
static MATHFUNCSDLL_API double Add(double a, double b);
static MATHFUNCSDLL_API double Subtract(double a, double b);
static MATHFUNCSDLL_API double Multiply(double a, double b);
static MATHFUNCSDLL_API double Divide(double a, double b);
};
}
// 以上マイクロソフトのチュートリアルページから引用
一見C++のクラスが使えるように思えますが、リンクできるのはstatic関数
のみであり、普通のメンバを持つ普通のクラスは使えないのです。
MicroSoftはこんなごまかし例を載せるまえに、
説明冒頭で「ダイナミック・リン・クライブラリに入れられる
のはスタティックメンバのみ」と言うべきです。
「DLLはUNIX/Linuxの共有ライブラリに相当する」というのは ウソに近いものなのです。
せっかくC++を使っても非オブジェクト指向設計になる理由、そうせざるを得ない理由の一つが これなんでしょうねえ。
| 固定リンク

