にインポートするにはどうすればDのライブラリからクラスをインポートできますか?
私が間違っていることはありますか?私はdllからlibsを通して関数をインポートしましたが、決してクラスはありませんでした。dlang C++からMagick ++クラスをD
これらのエラーを取得するの.libからクラスをインポートしようとしている:ここで
main.obj : error LNK2019: unresolved external symbol "public: void __cdecl Magick::Image::write(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function _Dmain
main.exe : fatal error LNK1120: 1 unresolved externals
は、私はクラスをインポートしようとする方法ですが、私はこれらが正しい定義であると思いますが、間違っているかもしれません:
pragma(lib, "library.lib");
extern (C++){
Image createImage(const(char)*);
void deleteImage(ref Image d);
}
pragma(lib, "C:/Program Files/ImageMagick-7.0.5-Q16/lib/CORE_RL_Magick++_.lib");
pragma(lib, "C:/Program Files/ImageMagick-7.0.5-Q16/lib/CORE_RL_MagickCore_.lib");
pragma(lib, "C:/Program Files/ImageMagick-7.0.5-Q16/lib/CORE_RL_MagickWand_.lib");
extern (C++,Magick){
void InitializeMagick(const(char)*);
//void InitializeMagick(const(char)* __ptr64);
class Image{
//There are errors trying to import any constructor or function
//this();
//this(const(char)*);
final void write(const(char)*);
}
}
int main(string[] args){
Magick.InitializeMagick("");
Magick.Image img = createImage("screenshot:");
img.write("file.jpg"); //linking problems after adding this line
return 0;
}
これは、私はDにインポートしようとしている機能である:
void Image::write(const string &filename);
これらのコンストラクタを取り除くと、DにC++クラスを構築することはできません.C++ヘルパ関数を作成して破棄する必要があります。 –
ok私はそれを得るが、ウェブサイトにこの例があると思う:https://dlang.org/spec/cpp_interface.html私は彼らがそれを使用するためにクラスを定義したと思ったが、クラスを追加してください。 – shuji
どのクラスとどの例ですか?最初の「Using C++ Classes from D」には、createInstanceとdestroyInstanceがあり、構築/破棄を扱うことができます。「C++からDクラスを使用する」は、クラスが実際にDとC++で記述されているためです。その場合、新規/削除はC++ではなくDで行う必要があります)。しかし、DのC++クラスを使用する場合は、メンバーを呼び出すことができるようにクラスを定義し、作成することはできません。 –