Соединение неуправляемых и управляемых классов

У меня есть собственный класс C ++, который экспортируется в Win32 Dll:

class __declspec(dllexport) Manager { ... }

Dll создан успешно. Давайте назовем это Unmanaged.dll,

Я хочу использовать этот класс в приложении .Net. Поэтому я решил создать управляемые классы-оболочки C ++. Поэтому я создал новую библиотеку классов CLR, в которой я установил Unmanaged.dll в качестве входа для компоновщика.

При компиляции управляемого dll я получаю следующую ошибку:

фатальная ошибка LNK1107: неверный или поврежденный файл: невозможно прочитать в 0x318. (Unmanaged.dll в проекте ManagedBridge)

Оба проекта настроены на компиляцию в x64. DLL Export Viewer показывает конструктор класса и методы. Так что Dll вроде бы в порядке.

Есть что-то, чего мне не хватает?

1

Решение

Вы не можете передать DLL компоновщику, он не знает, что с ним делать. DLL вообще не подходит, чтобы помочь компоновщику определить, что DLL содержит функции, которые вы вызываете. Экспорт из DLL может быть числом имени. Поскольку число («порядковый») является проблемой, компоновщик не будет знать, как сопоставить число с именем идентификатора. И имя не обязательно должно совпадать, имена обычно упрощаются, убирается оформление имени.

Вместо этого вы должны сообщить компоновщику о библиотеке импорта DLL. Который имеет больше информации, включая порядковый номер для сопоставления имен и оригинальное оформленное имя, которое использовал компилятор. Библиотека импорта — это библиотека .lib, которая была создана при подключении библиотеки DLL. Вы найдете его в каталоге сборки проекта DLL. Добавьте его путь к настройке дополнительных зависимостей компоновщика.

2

Другие решения

Других решений пока нет …