2013-07-02 1 views
2

Независимо от того, как странно это звучит, я не нужен O_o Ну, другое решение, если это возможно загрузить родной DLL, как массив байтов в памяти, но вызвать функцию оттуда без DllImport> _ <Есть ли в любом случае функция DllImport из родной dll, загруженной в RAM в качестве массива байтов?

Любопытное этот путь :

byte[] dll_data = File.RealAllBytes("native.dll"); //this is just example, in real architecture bytes comes from another source and should never be stored on HDD 
//uhh... ohh... do something to call exported function named "WeirdNativeFunction" 

ответ

1

Вам нужно будет вызвать соответствующие методы для загрузки родной DLL в вызывающий процесс. Проект MemoryModule на GitHub предоставляет (собственный) API для обработки этого, который вы могли бы использовать из проекта C++/CLI.

После того, как вы имели native.dll загруженная в процесс, вы можете использовать P/Invoke to call GetProcAddress, чтобы получить ручку на "WeirdNativeFunction" и Marshal.GetDelegateForFunctionPointer, чтобы преобразовать его в управляемый делегат, который вы могли бы назвать.

 Смежные вопросы

  • Нет связанных вопросов^_^