6

一部のハードウェアへのアクセスを提供する、C++ で記述された dll を作成しています。この dll を使用する C# プログラムもあります。

バージョンに問題があります。実際、C# プログラムを実行するときは、コンパイル時に使用した正確な C++ dll バージョンを絶対に使用したいと考えています。つまり、C# プログラムが C++ dll 1.2.3.4 を使用してコンパイルされた場合、プログラムは C++ dll 1.2.3.5 での実行を拒否します。

バージョン 1.2 の任意の C++ dll を使用するように C# プログラムに指示したいと思います。

C# プロジェクトのどこでこれを構成できますか?

この質問は、よりCOMに関連するものに取って代わられました。

4

3 に答える 3

1

1.2.* バージョンのみを使用するようにプログラムを構成することはできないと思います。そのためのコードを自分で書かない限り。もう 1 つの可能性は、C++ dll のバージョン タグを変更しないことですが、変更したくないようです。

バージョン依存を回避する解決策は、dllimport を使用することです。C++ で記述された任意の dll をロードできます。バージョンに依存しません。msdn の例と最後のリンクを参照してください。

using System;
using System.Runtime.InteropServices;

class Example
{
 // Use DllImport to import the Win32 MessageBox function.
 [DllImport("user32.dll", CharSet = CharSet.Unicode)]
 public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

 static void Main()
 {
     // Call the MessageBox function using platform invoke.
    MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
 }

}

MSDN での説明

于 2013-07-11T08:30:57.920 に答える
1

実行時に dll をロードし、リフレクションを使用してそのメソッドを呼び出します。

Assembly assembly = Assembly.LoadFrom("C:\\test.dll");

Assembly.GetTypes();

Activator.CreateInstance(type);
于 2013-07-11T08:12:19.050 に答える