質問

しに必要なDLLを利用クラスに定義されている実行ファイル(DLLおよび実行可能な別できるものと同じコンパイラ).私たいと思っているソースコードは、このクラス定義をご利用にDLLのみ。

この方法、それはすべての必要なクラスメソッドを virtual (そのDLLにリンカーする必要がないこれらの方法'定義.デメリットはこのアプローチ:

  1. できない作物の輸出の授業 DLLコードを使用 new (aて を追加機能 実行ファイルのコードとします。
  2. いすべてのこれらの方法 virtual, でもそれ以外ならばする必要がないのに すると virtual.

それよりも輸出クラスからDLLを実行Microsoftの __declspec(dllexport) 保管-クラスの拡張属性。があるので、輸出クラスから実行ファイルにDLLを同じます。

私の古いBorland C6コンパイラになって頂くを輸入図書館の構築を実行す。(で、編集、DLL、リンカーを与えてくれてい未解決の外部に対するエラーメッセージをすべて輸入ノン-バーチャルクラス。) で限定のことは、このコンパイラ、またはなったかもしれない何かが足りない重要なのでしょうか?

役に立ちましたか?

解決

これまでに知okで使用MS VSのdllexportをエクスポートするにはクラスや関数からエグゼおよび使用することにDLL.とで涼しい場合はDLLとExeを実行し 一度のプロセス.

他のヒント

きるこのクラスにDLLがないのです。

いることを理解する上で推論にも対応するためのクラスはDLLますが。

ETA: かり掘りを見つけ このリンク を説明する方法をインポート図書館からのエグゼプロジェクトVisual Studio2008年.こうした輸出していなんだかとってもおいしそうにあなただけの正規__declspec(dllexport).

OK、新しい答えた、新たな情報です。できない場合は生成する輸出のお客様がおEXEとコンパイラ、おかしいこのようになっております、創造的であり、hacky、一般的に推奨されません液

ステップ1:を作成しC APIラッパーのためのクラスちょっとこのような(しょうぞコンパイルでご利用いただけます。に)このメソッドをオーバーライド:

// Yes, need some 32 bit/64 bit checks here
#define MYHANDLE unsigned int

__declspec(dllexport) MYHANDLE MyClassNewInstance() {
   MyClass* ptr = new MyClass();
   return (MYHANDLE)ptr;
}

__delspec(dllexport) MyClassDoSomething( MYHANDLE handle, int parm ) {
  MyClass* ptr = (MyClass*)handle;
  ptr->DoSomething(parm);
}

etc..

ステップ2:実際に取得し、C機能のEXE用のDLLを使用Win32API機能GetModuleHandle()およびGetProcAddress().

ステップ3:をプロキシクラスにおDLL.の方法は、プロキシクラス以外何もできない、自分の相手側のC関数からEXE.

この"リアル"の実装クラスのDLL.このhackであろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top