Собственная dll, созданная с флагом / CLR, содержащим управляемый класс - PullRequest
1 голос
/ 13 октября 2011

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

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

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

и я получаю ошибку компиляции из-за отсутствия пространства имен "ShashiTest"

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

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

Или я что-то упустил

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

#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 и запускаю его, я получаю

System.BadImageFormatException. Любая подсказка?

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

1 Ответ

1 голос
/ 13 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...