Как выполнить управляемый код из неуправляемого кода? - PullRequest
4 голосов
/ 12 февраля 2012

Держите это прямо там! Вы можете подумать, что об этом уже миллионы раз и на него отвечали столько же раз, сколько Земля вращалась вокруг Солнца, но, пожалуйста, смиритесь со мной об этом.

Моя задача проста: В моей программе на C ++ (Windows) я хочу иметь возможность выполнять некоторые управляемые (C # или VB.NET и т. Д.) Коды.

Подождите! Перед тем, как начать работать с CTRL-T, возьмите случайную ссылку из Google, нажмите ее мне в лицо и скажите «Учитесь искать!», Пожалуйста, продолжайте читать:

Я начал сздесь http://sites.google.com/site/robertgiesecke/, что позволило мне экспортировать функции C # как функции стиля C, а затем использовать их в C ++.Все работает хорошо.Но теперь у меня есть два двоичных файла, native exe и managed dll .

Как я могу вставить dll в exe, отобразить его в памяти и, наконец, вызвать его оттуда?Другими словами, я хочу иметь только один единственный exe-файл, содержащий как исходный exe-файл, так и управляемый dll.

Конечно, я уже пробовал это http://www.joachim -bauch.de / tutorials / loading-a-dll-from-memory /
К сожалению, это не работает,Код не может завершить процесс присоединения в конце.Я предполагаю, что это из-за управляемой формы DLL.

Спасибо за чтение.

РЕДАКТИРОВАТЬ: Я действительно не хочу использовать C ++ / CLI всеми средствами(

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

То, что вы пытаетесь здесь, не поддерживается из-за проблем безопасности.По сути, вы пытаетесь выполнить свои собственные блоки данных (которые могут даже быть помечены флагом nx (без выполнения). Я пробовал нечто подобное в прошлом (по причинам DRM; только как в «избегать декомпиляторов» - я неПоклонник ограничительного DRM). Возможно, но это PITA для использования и подвержен ошибкам в зависимости от настроек безопасности целевой машины. Если возможно, избегайте этого любой ценой.

Код в блогев основном с использованием правильного подхода, однако этот код будет работать только с неуправляемыми библиотеками (как вы уже заметили). Это просто из-за того, как создаются управляемые библиотеки и исполняемые файлы (по сути, это просто небольшая встроенная заглушка для исполняемых файлов для запуска среды выполнения);но для библиотек нет (и, следовательно, нет собственной точки входа; что потребуется для этого подхода)).

0 голосов
/ 12 февраля 2012

То, что вы пытаетесь создать, это сборка "Смешанный режим". Это можно создать, только если вы создаете сборку / исполняемый файл "Managed-C ++" в Visual Studio.

Из моего многолетнего опыта C # / VB.NET не поддерживает это. Хотя я могу ошибаться, и это может быть просто ограничением Visual Studio, а не C # как таковым.

...