Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
1

C++ DLL в C#

04.12.2015, 19:14. Показов 406. Ответов 4
Метки нет (Все метки)

Всем привет. Существует некая DLL(написана на плюсах) внутри которой есть различные функции. Каким образом подключать эту DLL в C# проект? Как вызывать функции из этой DLL(есть какие-то особенности, которые я должен знать?)? Есть ли какие-то требования для функций внутри C++ DLL, чтобы их можно было вызывать в C#? Или я могу писать там CPP функции как обычно, а потом их вызывать в С#(разумеется после правильного импорта, о котором вы мне расскажете )?
Вызов функций из C++ DLLек быстрее, чем если бы они были написаны сразу на C# и вызваны из кода(все-таки не заставляем GC следить за тем, что творится внутри CPP DLL)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2015, 19:14
Ответы с готовыми решениями:

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll,...

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу...

4
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,956
04.12.2015, 23:59 2
Цитата Сообщение от Bushmeister Посмотреть сообщение
Каким образом подключать эту DLL в C# проект?
Атрибут DllImport и ключевое слово extern.
Цитата Сообщение от Bushmeister Посмотреть сообщение
Есть ли какие-то требования для функций внутри C++ DLL, чтобы их можно было вызывать в C#?
Только Си-шные типы, никаких С++ классов.
Цитата Сообщение от Bushmeister Посмотреть сообщение
Вызов функций из C++ DLLек быстрее, чем если бы они были написаны сразу на C# и вызваны из кода(все-таки не заставляем GC следить за тем, что творится внутри CPP DLL)?
Не обязательно, на pinvoke тоже есть определенные затраты, учитывая что можно использовать unsafe.
0
31 / 31 / 28
Регистрация: 19.09.2013
Сообщений: 370
05.12.2015, 11:42 3
Нужно создать новый класс и запихать в него DllImport. Пример с WinAPI-функцией:
C#
1
2
3
4
5
6
using System.Runtime.InteropServices;
 
public static class WinAPI {
   [DllImport("kernel32.dll")]
   public static extern bool Beep(int freс, int duration);
}
Пишу по памяти, но суть такова.
0
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
05.12.2015, 12:26  [ТС] 4
А что по поводу extern "C" и __declspec?
Обязательно ли это?
0
4700 / 3244 / 1375
Регистрация: 09.05.2015
Сообщений: 7,956
05.12.2015, 15:59 5
Цитата Сообщение от Bushmeister Посмотреть сообщение
А что по поводу extern "C" и __declspec?
Обязательно ли это?
Да.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 15:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Точка входа в процедуру EventSetInformation не найдена в библиотеке DLL advapi32.dll
Здравствуйте. Столкнулся с такой проблемой, в какой-то момент у меня просто перестал запускаться...

Точка входа в процедуру decodepointer не найдена в библиотеке DLL KERNEL32.dll
Ээ.... Здравствуйте есть такая проблема привожу на примере установки LoL. начинаю инсталить...

Точка входа в процедуру InitializeCriticalSectionEx не найдена в библиотеке DLL KERNEL32.dll
Здравствуйте, коллеги! Случилась такая вещь. Малолетний внук что-то нажимал на клаве, выключил...

Точка входа в процедуру RegDeleteKeyExA не найдена в библиотеке DLL ADVAPI32.dll
Уважаемые форумчане. При попытке установить Java Development Kit 8 Точка входа в процедуру...

Точка входа в процедуру SMaplS_IP_EBP_12 не найдена в библиотеке DLL KERNEL 32 dll
при запуске игрули появлялось окно не найден файл xlive.dll...нашел в нэте..скачал..теперь...

Точка входа в процедуру alSourke3i не найдена в библиотеке DLL OpenAL32.dll.
Ребята помогите мне пожалуйста! после установки игры dirt2 стало выдавать ошибку что точка входа в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.