Проблема c ++ / cli dll в Windows 7 без установленного vs2008 - PullRequest
2 голосов
/ 11 июля 2010

Хорошо, вот моя странность на сегодня.
Я создаю расширения для существующей программы на C ++, которые не имеют доступа к исходному коду.

Я пишу стандартные библиотеки C / C ++ и использую IJW для вызова библиотек C #. Некоторое время я этого не делал, но сейчас пытаюсь заставить его работать в Windows 7. Я получаю сообщение об ошибке (Ошибка 0000036B1 - Не уверен, является ли это внутренним номером ошибки приложения или ошибкой Windows.

У меня есть несколько виртуальных ПК (XP и Windows 7). DLL отлично работает на XP. Он также работает в Windows 7, если установлена ​​Visual Studio 2008. но не в чистой Windows 7 с установленным распространяемым пакетом Microsoft Visual C ++ 2008 SP1.

Я могу скомпилировать и запускать прямые библиотеки C ++ на чистой Windows 7, если переключатель компилятора установлен на MT [d], но если я устанавливаю переключатель / clr, я должен изменить его на MD [d], а затем это терпит неудачу на чистой коробке Windows 7. Но не в Windows 7 с установленной Visual Studio 2008.

Есть идеи, что мне нужно установить на чистую коробку? (кроме VS конечно ;-))

Спасибо за вашу помощь.

L. Ли Сондерс

Ответы [ 3 ]

1 голос
/ 14 июля 2010

ОК, это плохо.Кто-то указал, что мне нужны файлы отладочной версии, а это значит, что я скомпилировал свою dll в режиме отладки.Он предложил мне попробовать режим релиза.

Итак, с новой копией моего Виртуального ПК под управлением Windows 7 Basic (установленный редиаст 3.5 C ++) я просто скопировал свою оригинальную dll (ту, что в режиме отладки)чтобы убедиться, что у этого Виртуального ПК была проблема.Да, это так.

Затем я скопировал DLL-файл, скомпилированный в режиме Release.Это сработало.

Хорошо, я официально хочу стучать головой о стену.

Спасибо за ваше время.

L.Ли Сондерс

0 голосов
/ 12 июля 2010

Теперь мне плохо. Это была не совсем чистая установка Windows 7. Мне нужно было установить приложение, для которого я пишу расширения. Последний патч этих программ установил распространяемый пакет Visual C ++ 2008 SP1.

Что ж, я решил попробовать создать инсталляционный проект с небольшим кусочком C ++ / cli dll и попросил включить в него зависимости. Вытащил в 2 файла:

c: \ программные файлы \ общие файлы \ модули слияния \ microsoft_vc90_debugcrt_x86.msm C: \ Program Files \ Общие файлы \ Модули слияния \ policy_9_0_Microsoft_VC90_DebugCRT_x86.msm

Я запустил установку, и крошечное приложение заработало. Я вручную скопировал свои библиотеки и вот, теперь они работают. Поэтому, чтобы он заработал, мне понадобились эти два файла.

Почему? И почему они не были включены в пакет Redist?

0 голосов
/ 11 июля 2010

Вам понадобится как распространяемая среда выполнения VC ++ (с кодом поддержки для собственного C ++), так и .NET Framework 3.5 (с кодом поддержки для C ++ / CLI).

.NET 3.5 должна поставляться с Win7, но VS2008 SP1 поставляется с .NET 3.5 SP1, поэтому я бы рекомендовал установить все обновления .NET из Центра обновления Windows.

...