Встроенная библиотека DLL с флагом / CLR, содержащая управляемый класс

#c #clr #managed

#c #clr #управляемый

Вопрос:

У меня есть старая встроенная библиотека DLL MFC / c , и мне удалось скомпилировать ее с флагом / CLR. Теперь я добавил управляемый класс C / CLI в dll в namaspace.

Файл заголовка находится ниже, а файл cpp имеет только #include для файла заголовка. Встроенная DLL — это огромный проект dll с большим количеством неуправляемого кода, но в нем есть только один управляемый класс c , как показано ниже.

Когда я добавляю эту библиотеку DLL в качестве ссылки на проект .net winforms, я не вижу это пространство имен / класс в обозревателе объектов,

и я получаю ошибку компиляции из-за того, что не нахожу пространство имен «ShashiTest»

Я использую Visual Studio 2008.

Собственные библиотеки DLL в смешанном режиме не могут быть добавлены в качестве ссылки на управляемый проект?

Или я что-то упускаю

Пожалуйста, помогите.

 #pragma once
#using<mscorlib.dll>
#using<system.windows.forms.dll>
// Class derived from Forms

using namespace System::Windows::Forms;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;
using namespace System::Windows::Forms;

namespace ShashiTest {
/// <summary>
/// Summary for test
/// </summary>
   public ref class test
  { 
   public:
    test(void)
    {

    };
    void ShowMessage()
    {
        MessageBox::Show("Hello World");
    }
  };
}
  

Когда я упростил свою проблему..Я создал новую библиотеку DLL MFC и добавил к ней управляемый класс C (тот же класс, что и выше). Скомпилирована с флагом / CLR.

Когда я добавляю эту библиотеку DLL в проект winforms и запускаю ее, я получаю

Система.Исключение BadImageFormatException. Есть какие-либо подсказки?

Однако я вижу, что класс и пространство имен, а проект winform отлично компилируется, в отличие от проблемы, с которой я столкнулся выше.

Комментарии:

1. Это должно сработать. Может быть, вам следует показать какой-нибудь код? Или используйте reflector для проверки содержимого вашей библиотеки DLL.

Ответ №1:

System.BadImageFormatException обычно вызвано наличием в AnyCPU приложении .NET ссылки на DLL, содержащую 32-разрядный собственный код. При запуске на 64-разрядной платформе появляется ошибка, поскольку AnyCPU приложение выполняется как 64-разрядное и не может загрузить DLL. Исправление для этого заключается в том, чтобы (легко) пометить приложение как только для x86 или (сложно) предоставить как 32-разрядные, так и 64-разрядные версии всех библиотек DLL, содержащих машинный код.

Конечно, у вас может быть какая-то другая проблема. Проверка вашей библиотеки DLL с помощью Red Gate Reflector, как предложено @cdleonard в комментариях, является отличным следующим шагом. Или ILSpy, который является бесплатным.

Комментарии:

1. Спасибо, это была моя проблема, я перенес свое .net-приложение на x86, и проблема исчезла.