私は静的メンバー関数を持つ静的クラスを定義するC#dllプロジェクト(my_cs_dll.dll
)を持っています。C++からどのようにマネージド(c#)関数を呼び出すのですか?
namespace Foo
{
public static class Bar
{
public static double GetNumber() { return 1.0; }
}
}
また、/ clrを使用しているC++ dllプロジェクトもあります。
#using <my_cs_dll.dll>
double get_number_from_cs() { return Foo::Bar::GetNumber(); }
私はC言語で'my_cs_dll.dll'
への参照を追加しました++プロジェクトの共通のプロパティは、(ローカル/コピーの依存関係がともに真でコピー)のセクションを参照しています。
また、私は、C++プロジェクトの構成プロパティC/C++の一般的な「解決する#参照を使用して」セクションに'my_cs_dll.dll'
へのパスを追加しました。
すべてがエラーなしでビルドされますが、実行時にはmy_cs_dll.dll
アセンブリが見つからないと主張するシステムから 'System.IO.FileNotFound'例外が引き続き発生します。
両方のDllは、私が実行しているのと同じディレクトリに存在します。
私は...
を上記の設定のバリエーションのすべての種類を試してみましたが、私はうまく管理/管理対象外の相互運用に見つけることができるすべてのものを読んで、私は何が間違っているの周りに私の脳を得るように見えることはできませんしています'm using VS2008 & .NET 3.5
こんにちはマット、 。マネージdllを実行可能ファイルと同じディレクトリに移動すると、問題が解決しました。 ありがとうございました! – mark
OK、よろしくお願いします。私は、DLLが実行可能ファイルのサブディレクトリにある限り、どれほど深いかに関係なく、アセンブリは解決されるという印象を受けました。しかし、私が言ったように、私はこれを見てからしばらくしています。 –
埋め込みリソースからC#DLLを読み込むときに同様のコードを使用しました。そのトリックは、C#DLLを参照していないファイルにこのコードを配置することでした。それは遅延ロードのようだ。ネットアセンブリは、問題のアセンブリへの参照を含むコンパイル単位(.cppファイル)へのエントリ時に発生します。 – mheyman