19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
.NET 3.x

Как подключить к приложению AnyCPU библиотеку x86?

22.11.2018, 11:40. Показов 3021. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано:
1. Есть приложение на C#, собранное под AnyCPU, оно подсасывает библиотеки из определенной папки.
2. Одна из библиотек устарела, в ней нужно использовать функции, описанные в библиотеке на c++, которая собрана как x86.
3. Основное приложение и библиотеку на плюсах переписывать нельзя.
4. Плюсовая библиотека подключается через DLLImport.
5. Винда x64, но в дальнейшей эксплуатации может быть любая

Что пробовал (неудачные попытки):
1. Изменить разрядность библиотеки на c# на x86. Результат: не подключается к программе. Если просто проект новый AnyCPU создать и в ссылках подключить эту библиотеку, то тоже ошибку выдает.
2. Не менять нигде разрядность. Результат: ошибка о невозможности подключить один или несколько модулей, связанных с библиотекой на плюсах.
3. Создать библиотеку на плюсах, скомпилировать под x64, а из нее вызывать x86. Результат: как и в прошлом способе.

Вопрос: как быть-то тут? Как плюсовую библиотеку x86 подключить к шарповскому проекту AnyCPU? Допускаются любые костыли и говнокод, главное чтоб работало.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2018, 11:40
Ответы с готовыми решениями:

Как использовать DLL (x86) на AnyCPU (x64)
Доброго времени суток! Имеется задача, которая решается только на x86 сборке. Выход - *.dll файл (конечная платформа x86). Есть...

Как подключить CPL-библиотеку к приложению?
Делаю свою CPL-библиотеку. Пытаюсь подключить ее к приложению, так как это вроде как та же DLL-библиотека, однако не очень понятно где...

Как подключить x86 dll библиотеку к x64 проекту
Планировал написать дополнение к моему коду на ассемблере. Но возникла проблема. Компилятор x64 в студии не поддерживает ассемблер. Решил...

24
Эксперт .NET
 Аватар для Rius
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,052
Записей в блоге: 14
22.11.2018, 11:44
Сделать x86 net приложение, которое работает с библиотекой напрямую. А с этим приложением общаться через консоль или иные межпроцессные средства.
Тот ещё говнокод.
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
22.11.2018, 11:47  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
общаться через консоль или иные межпроцессные средства
И правда тот еще говнокод... Ну на крайний случай конечно подойдет, но может еще есть способы?
0
Эксперт .NET
 Аватар для Rius
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,052
Записей в блоге: 14
22.11.2018, 12:07
Библиотека может быть загружена только в той разрядности процесс, что и она сама. Ничего не поделать.
Средство для этого запилили: https://github.com/CodefoundryDE/LegacyWrapper
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
22.11.2018, 12:51  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
https://github.com/CodefoundryDE/LegacyWrapper
Судя по описанию как раз то, что и нужно, спасибо большое, пошел разбираться)
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.11.2018, 16:10
Jluc, а что вам мешает просто скомпилить все приложение как x86?
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
23.11.2018, 19:17  [ТС]
Цитата Сообщение от Woldemar89 Посмотреть сообщение
а что вам мешает просто скомпилить все приложение как x86?
Отсутствие исходных файлов приложения и всех библиотек, которые оно использует. Да, можно конечно разобрать все, благо там об обфускаторе никто не думал, но это очень плохой вариант. Да и не все они могут быть потом обратно собраны, ибо мысль такая все же тоже была
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.11.2018, 01:00
Если приложение (запускаемый exe файл) собрано с target platform = AnyCPU, то с помощью утилиты CorFlags можно его пропатчить таким образом, чтобы оно запускалось как 32bit-ное, установив флаг 32BITPREFERRED
https://docs.microsoft.com/en-... rsion-tool
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
25.11.2018, 02:26  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
можно его пропатчить
Нет, приложение вообще нельзя трогать
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.11.2018, 14:01
Jluc, да там всего два бита поменять, никто и не заметит
0
Эксперт .NET
 Аватар для Rius
13019 / 7585 / 1660
Регистрация: 25.05.2015
Сообщений: 23,052
Записей в блоге: 14
25.11.2018, 14:15
Это если цифровой подписи нет и хеш не зафиксирован.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.11.2018, 17:50
Rius, насколько я знаю, с помощью ildasm, ilasm можно пересобрать убрав подпись или переподписав своей.
Но лучше конечно, если подпись важна, использовать метод с отдельным запускателем приложения.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.11.2018, 17:56
Цитата Сообщение от Jluc Посмотреть сообщение
2. Одна из библиотек устарела, в ней нужно использовать функции, описанные в библиотеке на c++, которая собрана как x86.
3. Основное приложение и библиотеку на плюсах переписывать нельзя.
Значит устаревшую библиотеку переписывать можно?
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
25.11.2018, 18:57  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
там всего два бита поменять, никто и не заметит
Ага, вот только там пара-тройка десятков файлов, все менять придется выходит.

Цитата Сообщение от kolorotur Посмотреть сообщение
Значит устаревшую библиотеку переписывать можно?
Да, по сути ее и нужно поменять
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.11.2018, 19:49
Цитата Сообщение от Jluc Посмотреть сообщение
Ага, вот только там пара-тройка десятков файлов, все менять придется выходит.
Пара-тройка десятков запускаемых файлов (exe)?
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
25.11.2018, 20:15  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Пара-тройка десятков запускаемых файлов (exe)?
Нет, библиотек, которые под AnyCPU собраны, но их же тогда тоже переделывать надо.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.11.2018, 20:51
Цитата Сообщение от Jluc Посмотреть сообщение
Нет, библиотек, которые под AnyCPU собраны, но их же тогда тоже переделывать надо.
Нет! Надо пропатчить только запускаемый exe файл.
А библиотеки построенные под AnyCPU совместимы как с x86 так и с x64.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.11.2018, 21:20
Jluc, создайте управляемую обертку для сишной либы, зарегистрируйте ее в COM и подключайте через суррогатный хост в той сборке, которую можете изменять.
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
25.11.2018, 23:09  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
зарегистрируйте ее в COM
Скорее всего так и сделаю, завтра буду пробовать
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
28.11.2018, 12:27  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Надо пропатчить только запускаемый exe файл
пересобрал под x86, не помогло

Цитата Сообщение от kolorotur Посмотреть сообщение
создайте управляемую обертку для сишной либы, зарегистрируйте ее в COM
Обертка на шарпе стало недоCOM-объектом, который в .NET не подключается, а на плюсах чет пошло не так. Собственно, на плюсах была и еще одна библиотека, с тем же функционалом примерно, и работающая как COM-объект, но в итоге и с ней плохо. Она собрана win32, а шарп все равно требует x64. Пересобрал под x64, но не смог зарегистрировать. Проклинаю всю винду...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2018, 12:27
Помогаю со студенческими работами здесь

Написать библиотеку рассчета функций и подключить к консольному приложению
Построить консольное приложение для вычисления одной из стандартных функций, пу-тем создания собственной библиотечной функции. Приложения...

Необходимо подключить нативную библиотеку x86 С/С++ *.dll к сервису WCF C# 4.0
Необходимо подключить нативную библиотеку x86 С/С++ *.dll к сервису WCF C# 4.0. Сервис создаю на локальном компьютере. Обращаюсь к...

Как подключить к приложению манифест?
расскажите пожалуйста пошагово,что делать,чтобы подключить файл манифеста в проект ,чтобы интерфейс был как у Win XP,есть код манифеста на...

Как подключить MS Access к приложению
У меня есть приложение. Нужно подключить базу данных для выполения регистрации и входа на с++. Добавлено через 11 минут посоветуйте...

Как подключить пользовательскую DLL к приложению
Добрый вечер! Я первый раз пишу dll. Вот ее текст: My.cpp: #include<iostream> #include "My.h" using namespace std; namespace...


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

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

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru