たとえば、MFC アプリケーションにプラグインする必要がある場合など、COM/MFC dll であることが本当に必要でない限り、それをストレートな C++ .dll にすると、より明確になる可能性があります。
extern キーワードに関するご質問への回答として、.lib ファイルを含める場合、これは呼び出し元のアプリケーションでのみ使用されると思います。
これは、ストレート C++ dll の作成に関するチュートリアルです。
DLL を取得すると、問題は、DLL 内のアンマネージド コードと C# アプリケーション内のマネージド コードを扱っているという事実になります。つまり、C++ は C# で使用されるマネージド型について何も知らないため、同様に、C# は C++ dll で使用される型のメモリを処理する方法がわからないため、dll でメモリを管理するのはユーザー次第です。C# ガベージ コレクターは、C# アプリケーション内のメモリのみを処理できます。
答えは、C++ で「通常の」dll を作成し、C++/CLI でそのラッパーを作成して、すべてのメモリ管理と、C++ アンマネージ型から C# 型への変換、およびその逆の変換を行うことだと思います。marshal
このクラスを使用して、マネージド型 (C#) とアンマネージド型 (C++) を変換する必要がある場合があります。次に、C++ dll を直接インポートするのではなく、C++/CLIラッパーをインポートします。ラッパーが「ブリッジ作業」を行っているため、関数の呼び出しは C# アプリケーションで簡単になります。
私はサードパーティの C++ dll で同様のことを行いましたが、これは思ったほど悪くはないと思います。
これを行う方法に関するチュートリアルを次に示します。