У меня есть эта проблема, с которой я имею дело в течение некоторого времени. В начале у меня есть две библиотеки DLL с неуправляемым кодом (скажем ... dll_1, dll_2) и управляемые приложения в C#. То, что я должен сделать, - получить указатели на неуправляемые функции в dll_1 в управляемом коде, упаковать его в структуру и отправить эту структуру в качестве аргумента неуправляемой функции в dll_2. Кто-нибудь мог решить эту проблему раньше, чем может быть?Как отправить неуправляемые указатели на функции из dll в другую неуправляемую функцию в другой DLL через управляемый код?
1
A
ответ
0
Поскольку вы не делаете ничего в управляемом коде, но библиотеки DLL живут в одном процессе, просто используйте IntPtr
(автоматически 32 или 64 бит в зависимости от платформы), чтобы передать неуправляемый указатель. Разумеется, вы также можете вставить в свою структуру и использовать ее в качестве аргумента или возвращаемого значения при использовании внешнего вызова (например, [DllImport('YourDll')] static extern IntPtr ImportedFunction();
).
Однако, чтобы предоставить вам больше информации, необходимо будет узнать больше о вызовах DLL и их структурах данных.
... но убедитесь, что у DLL действительно есть один и тот же процесс (и квартира, если вы делаете COM) ... –
@ Понтус, вы, конечно, правы, но обход неуправляемых указателей не типичный COM задача и обработка смешанных адресных пространств тоже. Поэтому я просто принял простой/очевидный случай. – Lucero
Все, что вы написали, было правильным;) спасибо. –