HellFingers
@HellFingers

Как правильно создать DLL?

Добрый вечер. Есть задача передать данные из c# в c++. Смотрю в сторону DLL. Но офф.доки не особо понятны. Используя VS 2019. Создаю dll c именем Dll2, там есть два определенных файла DLL2.h и DLL2.cpp.Есть два вопроса. Первый, правильно ли я понимаю, что в файле заголовка я должен написать имена используемых далее методов таким образом:
#ifdef DLL2_EXPORTS
#define DLL2_API __declspec(dllexport)
#else
#define DLL2_API __declspec(dllimport)
#endif
...
extern "C" DLL2_API int Summ(int first, int second);
...

Затем, в файле Dll2.cpp я должен описать данный метод:
#include "pch.h"
#include "framework.h"
#include "Dll2.h"
...
DLL2_API int Summ(int first, int second)
{
return first + second;
}

затем я это все собираю. И второй вопрос как мне правильно подключить Dll к коду c#. Я должен использовать данный код?
[DLLImport("path_to_DLL")]
public static extern void Summ(int first, int second);
static void Main()
{
Console.WriteLn(Summ(2,3));
}

Не судите строго за ошибки. Только начал изучать c++. Заранее благодарен.
  • Вопрос задан
  • 849 просмотров
Решения вопроса 1
HellFingers
@HellFingers Автор вопроса
Проблема заключалась в Декорировании компилятором имен. Я изменил DllImport на такой:
[DllImport("C:\\Users\path_to_dll\DLL2.dll", EntryPoint = "?Summ@@YAHHH@Z")]

Для того чтобы найти новое имя я использовал DUMPBIN. Вот последовательность действий:
1. Открыть Visual Studio
2. Средства -> Командная строка -> Командная строка разработчиков
3. Вводите в командную строку следующий текст: DUMPBIN /EXPORTS "путь_до_вашей_длл"
4. Ищите в выводе свою функцию и вводите значение в EntryPoint
Надеюсь, кому-нибудь это поможет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы