C ++/CLIで記述されたカスタム.Netインターフェイスがあります。
public interface class IBackgroundExtractor
{
};
私のC#アプリケーションでは、インターフェイスは次のユーザーによって使用されます。
private IBackgroundExtractor extractor = null;
上記のコードは、(Visual Studioをインストールした)私のコンピューターではスムーズに実行されますが、(Visual Studioをインストールせずに)別のコンピューターではクラッシュしました。
AppName: speedtest.exe AppVer: 1.0.0.0 ModName: kernel32.dll
ModVer: 5.1.2600.5512 Offset: 00012aeb
null割り当てを削除すると、コードは両方のコンピューターで実行されます。
private IBackgroundExtractor extractor;
ただし、純粋なC#で別のインターフェイスを作成しました。インターフェイスをnullに設定しても、プログラムはクラッシュしません。
interface IAnotherInterface
{
}
private IAnotherInterface test = null;
C ++ / CLIインターフェイスの何が問題になっていますか?
[備考]
テスト用に2つの「クリーンな」新しいプロジェクトを作成しました。最初のプロジェクトはC++/ CLIクラスライブラリです([新しいプロジェクト]-> [Visual C ++]-> [CLR]-> [クラスライブラリ])。ライブラリの.hファイルに次の行を追加します。
public interface class ITest {
};
次に、Windowsフォームアプリケーションプロジェクトを作成し([ネットプロジェクト]-> [Visual C#]-> [Windows]-> [Windowsフォームアプリケーション])、メイン関数でITest変数を宣言します。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
ITest xxx = null;
}
プログラムは開発用コンピューター(インストールされているVisual Studio)で実行されますが、他の2台のコンピューターではクラッシュします。クラッシュしたコンピューターの1つは物理マシンで、もう1つは仮想マシンです。
Windows XP Pro SP3、Visual Studio 2010、および.NetFramework4.0を使用しています。