Я пишу DLL с использованием C#, к которому будет обращаться из окна приложений Delphi, и ударил проблему повторно экспортируя классы/методы. Независимо от того, что я пытаюсь, ничего не получается экспортировать.DLL не экспортирует классы/методы C#/C++
Я создал тестовую DLL, используя документированный метод, представленный Hans Passant в this question re UnmangedExports.
Я создал C# проект библиотеки классов со следующим кодом:
namespace ExportTestCS
{
public class ExpTest
{
public static void Test()
{
Console.WriteLine("Hi!");
}
}
}
и C++ 'обертку', чтобы сделать экспорт:
extern "C" __declspec(dllexport)
void __stdcall Test()
{
ExportTestCS::ExpTest::Test();
}
Проект C++ ссылается на # проект C и все это создает в порядке, но когда я запускаю DUMPBIN/экспорт на DLL нет ничего экспортироваться:
dumpbin /exports C:\Temp\ExportTest\ExportTestCS\Release\ExportTest.dll
Dump of file C:\Temp\ExportTest\ExportTestCS\Release\ExportTest.dll
File Type: DLL
Summary
2000 .reloc
2000 .rsrc
2000 .text
C:\Program Files (x86)\Microsoft Visual Studio 14.0>
Я запускал dumpbin против всех DLL, созданных сборкой для отладки и выпуска, и все они дают одинаковый результат.
Таким образом, мой вопрос - что я делаю неправильно? Я потратил много времени на то, чтобы тралить вокруг подобных вопросов, но все они, похоже, решаются с использованием оболочки C++ или UnmangedExports.
Оба проекта строятся для x86/win32 и имеют одну и ту же целевую структуру (4.5.2). Я пробовал различные комбинации статических классов, классов, __clrcall/__ stdcall и т. Д., Но безрезультатно.
Я также ранее пробовал пакет UnmanagedExports NuGet без успеха (так я нашел ответ Ганса).
Заранее благодарим за любую помощь!
После всех комментариев (спасибо!) Я подтвердил, что это проект динамической библиотеки, и я создал новую папку в проекте C++ и установил ее как выходную папку. Теперь сборка помещает файлы .lib, .exp, .pdb, .dll и .dll.metagen в эту папку, и это папка с сообщением на вкладке вывода при создании. Но до сих пор нет радости, выход из свалки такой же, как и всегда!
Когда я бегу DUMPBIN против файла .lib в новой папке выходной я получаю это:
Dump of file C:\Temp\ExportTest\ExportTestCPP\ExportTest\Output\exporttest.lib
File Type: LIBRARY
Exports
ordinal name
[email protected]
Summary
CC .debug$S
14 .idata$2
14 .idata$3
4 .idata$4
4 .idata$5
10 .idata$6
C:\Program Files (x86)\Microsoft Visual Studio 14.0>
Так это выглядит, как .lib экспортирует метод испытания, но не в финальной DLL?
Возможно, вы используете Dumpbin.exe в неправильной DLL при условии, что он находится в каталоге ExportTestCS. Вы должны запустить его в DLL, созданной вашим проектом на C++. Вы также должны будете убедиться, что * обе библиотеки DLL могут быть найдены в вашем тестовом проекте. –
Длинный снимок - вы установили [сборка: ComVisible (true)] из [assembly: ComVisible (false)] в AssemblyInfo? –
Я искал папки проекта для всех DLL-файлов, и они существуют только в проекте C#? Я попробую установить параметр AssemblyInfo и посмотреть, не изменилось ли это. – Mick