![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 09.01.2010
Сообщений: 14
|
![]()
Здравствуйте!
Задачка такова: Дано: исходник Visual C++; исходник Visual C#. Что нужно сделать: как-нибудь связать эти два исходника воедино, пробилдив Visual C++ в DLL, а Visual C# в EXE и "прикрепив" DLL к EXE. Подскажите, как это всё провернуть или как сделать по-другому без переписывания. Заранее благодарен. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 21.03.2010
Сообщений: 1,508
|
![]()
Код C++ подготавливаете к dll. Создаёте проект библиотеки, переносите все функции туда.
В проекте C# создаёте вызовы необходимых функций из свежесозданной библиотеки. Можете использовать статическое связывание. ЗЫ: Это всё, что я могу сказать, без конкретизации и Ваших пояснений. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 09.01.2010
Сообщений: 14
|
![]()
Поясняю:
Насколько я знаю, есть 2 способа связывания библиотек: неявный и явный. Неявный способ предполагает наличие файлов .h, .lib и .dll. Этот способ прост. Явный способ сложен, но предполагает наличие только .dll. Я выбрал неявный способ (он проще). Но есть одна несостыковка: заголовочный (.h) файл-то будет написан на C++, а не на C#. Получается, мне придется добавить в проект C# файл на языке C++? Мне кажется, с этим будут проблемки... |
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
придется писать DllImport, а заголовочники вообще не причем, в шарпе нет такого понятия.
вот кусок для размышления: Код:
Код:
ну и деф файл уж выложу: Код:
Цитата:
с .h труднее, но там немного нужно исправить явный заголовочник обычно(или просто взять сигнатуры функций) Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 03.08.2011 в 18:23. |
||
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 09.01.2010
Сообщений: 14
|
![]()
2 Пепел Феникса
Немного не понял... Начнем по-порядку: 1) DllImport — поначалу были вопросы о нем, но поискал в MSDN и нашел для себя ответы. Итак, насколько я понял, эта... хм... функция определяет откуда импортируется функция/переменная/что-либо-ещё. Это верно? 2) Немного я был запутан Вашим кодом... Насколько я понял, код распределяется вот так: Код:
Код:
Код:
3) Код:
Код:
Если все пункты верны, то я разобрался. Цитата:
[update спустя пару минут] Ещё пару вопросов: Про импорт/экспорт я, более-менее, понял. Я связывание? Мне следует поступить вот так? А вот, кстати хороший ресурс про def-файлы. Последний раз редактировалось BadProgrammer; 04.08.2011 в 21:37. |
|
![]() |
![]() |
![]() |
#6 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
1)DllImport это указание dotNET среде загрузить длл и импортировать указанную функцию, ну и потом вы можете её выполнить.
2)да, верно. 3) Цитата:
def же менее удобен(надо ручками вносить функцию), но позволяет твердо быть увереным в имени экспорта функции, что позволит применять длл практически с чем угодно. Цитата:
Цитата:
у меня в коде было это: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
![]() |
![]() |
![]() |
#7 | ||
Пользователь
Регистрация: 09.01.2010
Сообщений: 14
|
![]()
Всё, теперь я почти разобрался.
Почитал вот этот ресурс, но остались некоторые вопросы, которые я задам, так сказать, для полной ясности. Там написано так (секция Remarks, первый абзац): Цитата:
Цитата:
Еще было пару вопросов про def-файлы, но, думаю, я сам найду ответы, так что не будут Вас без нужды отвлекать. [update через минуту] Нашел русскую версию справки про DllImport. Последний раз редактировалось BadProgrammer; 05.08.2011 в 18:33. |
||
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
это ЕСЛИ
![]() при простом импорте ничего не надо делать(кроме того что ДЛЛ должна быть доступна по имени сразу) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 09.01.2010
Сообщений: 14
|
![]()
Значит параметр dllName должен быть полным именем файла?
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
ну да, первый параметр это имя длл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос про dll и сообщения | HollyPaladin | Win Api | 8 | 21.10.2010 11:30 |
Простой вопрос про память | Les_55 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 9 | 17.12.2009 12:28 |
Вопрос про классы в DLL. | Вадим Буренков | Общие вопросы Delphi | 15 | 14.09.2009 18:36 |
Вопрос про DLL | R@# | Общие вопросы Delphi | 11 | 21.06.2009 12:26 |
Вопрос про DLL-файлы | PChEL@ | Общие вопросы Delphi | 3 | 29.06.2007 02:03 |