1

現在、cpp-DLL について書いています。Afaik 別の cpp プログラムがそれらを使用したい場合は、関数をクラスと名前空間に配置する必要があります。しかし、Labview でも DLL を使用したいと考えています。Labview は、名前空間にもクラスにも含まれていないなど、関数がフリーである場合にのみ関数を認識します。これを DLL に実装するにはどうすればよいですか? 現時点では、#define 変数を設定しています。この変数が設定されている場合、関数は名前空間とクラスに囲まれています。そうでない場合は無料ですが、全体を 2 回コンパイルする必要があり、2 つの別個の DLL ファイルを取得します。では、両方のアプリケーションに対して 1 つの DLL ファイルのみが必要な場合はどうすればよいでしょうか? (関数を2回書くように言わないでください。管理費はさらに悪いです。以前にこれを試しました)。または、名前空間を使用しない場合は、LoadLibrary() を介して DLL を呼び出す必要がありますか?
どうもありがとうございました!

4

1 に答える 1

0

Afaik 別の cpp プログラムがそれらを使用したい場合は、関数をクラスと名前空間に配置する必要があります。

これは明らかに間違っています。これを行う必要はまったくありません。それに対して、DLL はもともと C 関数のライブラリとして導入されました。C++ はマングル名を使用して、名前空間/クラスおよびパラメーターの型を表します。これに関する基準はありません。さまざまなコンパイラが独自のスキームを使用します。

要約する:

  • dll から単純な C 関数をエクスポートすると、これは常に機能します。
  • 名前空間からクラスまたは何かをエクスポートする場合、他の .exe/.dll が同じバージョンのコンパイラでコンパイルされている場合、これは確実に機能します。そうでない場合 - これは依存します。

についてLoadLibrary: DLL の名前またはこの DLL 内の関数の名前が先にわからない場合、またはプロセスの最初にこの DLL をロードしたくない場合に使用する必要があります。それ以外の場合 (単純なケース)、実行可能ファイルをその DLL の implib にリンクします。これは、単純な c-function に対して完全に機能します。LoadLibrary何らかの理由で直接リンクがうまくいかない場合に使用する必要があります。

于 2013-09-16T19:43:48.323 に答える