У меня есть собственный интерфейс .Net, написанный на C ++ / CLI:
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
Если я удалю нулевое назначение, код будет работать на обоих компьютерах:
private IBackgroundExtractor extractor;
Однако я сделал еще один интерфейс на чистом C #.Установка нулевого интерфейса не приведет к сбою программы:
interface IAnotherInterface
{
}
private IAnotherInterface test = null;
Что не так в моем интерфейсе C ++ / CLI?
[Замечания]
Я создалдва «чистых» новых проекта для тестирования, первый - это библиотека классов C ++ / CLI (Новый проект -> Visual C ++ -> CLR -> Библиотека классов).Добавьте следующие строки в файл .h библиотеки:
public interface class ITest {
};
Затем создайте проект приложения Windows Form (Net Project -> Visual C # -> Windows -> Windows Forms Application) и объявите переменную ITest.в основной функции:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
ITest xxx = null;
}
Программа будет работать на компьютере разработчика (установлена Visual Studio), но аварийно завершится на двух других компьютерах.Один из разбитых компьютеров - это физическая машина, а другой - виртуальная машина.
Я использую Windows XP Pro SP3, Visual Studio 2010 и .Net Framework 4.0.