1

グループの新しいC#プログラムで使用する必要のあるネイティブC++dllがあります。ネイティブC++dll用のC++/ CLIラッパーを作成して、C#でインポートおよびコンパイルできるようにします。

私が知る必要があるのは、最初にラッパーソースファイルにdllファイルをロードする方法です。#using <...>がMSILに対して行うのとまったく同じですが、ネイティブC++dllをロードするためです。

また、dll内のオブジェクトと名前空間に(同義的に)どのようにアクセスできるようになりますか?

編集:

私が使う

class __declspec(dllexport) radar
{
    // declarations and definitions
    ...
};

レーダークラスをradar.dllからエクスポートし、次のようなVC ++(CLI)プログラムにインポートする必要があります:__declspec(dllimport) public class radar;定義をC#に実行するためですが、C#でレーダーが定義されていないため、レーダーが表示されません。 VC ++(CLI)でパブリック。VC ++ dllのコードでネイティブdllのオブジェクトを使用したい場合でも、次のようradar pos1();になります。

error C2512: 'radar' : no appropriate default constructor available

レーダー宣言だけを手元に置いて、これをどのように行うことができますか?

編集を終了します。

ありがとうございました!

4

1 に答える 1

3

これは自動的に行われるため、自分で行う必要はありません。C++/CLI プロジェクトの [追加の依存関係] 設定のリンカー設定で、ネイティブ DLL インポート ライブラリ (.lib) を指定します。リンカは、DLL 名への参照で C++/CLI アセンブリにリンクします。C# コードが C++/CLI アセンブリ内のマネージ型のいずれかを使用するとすぐに、CLR はアセンブリを読み込みます。Windows は、DLL 内のネイティブ DLL 参照を認識し、それらを自動的に読み込みます。

これは、Windows が実行時にネイティブ DLL を実際に見つけることができる場合にのみ、適切な結果をもたらすことができます。それらを EXE プロジェクトのビルド フォルダーにコピーします。これは厄介です。ビルド後のイベントを使用するか、Copy to Output Directory プロパティを true に設定して C# プロジェクトに追加することで、これを行うことができます。

于 2012-04-17T13:02:37.193 に答える