DllImport не работает на всех компьютерах [duplicate]

Если вы не инициализировали ссылочный тип и хотите установить или прочитать одно из его свойств, он будет генерировать исключение NullReferenceException.

Пример:

Person p = null;
p.Name = "Harry"; // NullReferenceException occurs here.

Вы можно просто избежать этого, проверив, является ли переменная не нулевой:

Person p = null;
if (p!=null)
{
    p.Name = "Harry"; // Not going to run to this point
}

Чтобы полностью понять, почему выбрано исключение NullReferenceException, важно знать разницу между типами значений и ссылочные типы .

Итак, если вы имеете дело со типами значений, NullReferenceExceptions не может произойти. Хотя вам нужно поддерживать оповещение при работе со ссылочными типами!

Только ссылочные типы, как следует из названия, могут содержать ссылки или буквально буквально ничто (или «нуль»). Если типы значений всегда содержат значение.

Типы ссылок (эти должны быть проверены):

  • динамический
  • объект
  • string

Типы значений (вы можете просто игнорировать эти):

  • Числовые типы
  • Интегральные типы
  • Типы с плавающей запятой
  • decimal
  • bool
  • Пользовательские структуры

8
задан Rick 19 January 2010 в 17:01
поделиться

4 ответа

звучит так, как будто вы не установили визуальное время выполнения c ++ на целевой машине. Вы можете установить это из здесь . Как кажется, использование отладочных версий этих библиотек, возможно, вам также нужно сначала создать приложение в режиме выпуска? В этом сообщении и у этого есть несколько других предложений, которые могут помочь ...

1
ответ дан Community 5 September 2018 в 07:00
поделиться

Он жалуется, что у него возникают проблемы с поиском DLL-элементов CRT. Сначала проверьте, содержит ли DLL необходимый манифест. В Visual Studio, File + Open + File, выберите DLL и убедитесь, что он содержит узел RT_MANIFEST. Следующая проблема заключается в том, что вы не можете развернуть сборку отладки вашей DLL. Он будет зависеть от отладочной версии CRT, вы не можете установить это на целевой машине.

Либо разблокируйте сборку выпуска вашей библиотеки DLL, либо скомпилируйте DLL с опцией / MT, чтобы ЭЛТ статически связана. Project + Properties, C / C ++, Генерация кода, Библиотека времени выполнения. Это не будет работать, если DLL была скомпилирована с параметром / clr.

13
ответ дан Hans Passant 5 September 2018 в 07:00
поделиться

Для проблемы с загрузкой DLL я предлагаю вам использовать инструмент Dependency Walker .

Если вы владеете Visual Studio 2005, вы можете найти его в C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe.

Обновление:

MSVCR90D.DLL - это отладочная версия среды выполнения Visual C ++ 9.0. Его следует использовать только для целей отладки. Я настоятельно рекомендую создать выпускную версию вашей библиотеки, чтобы избежать проблемы с загрузкой DLL. Однако, если вам абсолютно необходимо развернуть отладочную версию, вы найдете все необходимые библиотеки DLL в C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

7
ответ дан Laurent Etiemble 5 September 2018 в 07:00
поделиться

Является ли lib.dll 32-разрядной DLL? Ваша программа на C # будет запускаться на x64 изначально, но не сможет загрузить 32-разрядные библиотеки DLL. Вы можете попробовать изменить целевой процессор проекта C # на «x86», чтобы заставить его работать под WOW64.

2
ответ дан wj32 5 September 2018 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: