Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.11.34] |
|
Сообщ.
#1
,
|
|
|
DLL (создана в Delphi):
library NativeDLL; {$R *.res} function GetSomeString: PChar; begin Result := 'String from native DLL'; end; exports GetSomeString; begin end. Вызов из программы на C#: using System; using System.Windows.Forms; using System.Runtime.InteropServices;// Это необходимо добавить namespace LoadingNativeDll { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Открываем DLL, получаем ее Handle IntPtr hExe = Imports.LoadLibrary("NativeDLL.dll"); // Получаем адрес функции, експортируемой DLL IntPtr NativeFunction = Imports.GetProcAddress(hExe, "GetSomeString"); // Используя маршалинг, приводим неуправляемую функцию к делегату NativeInvoker nativeInvoker = Marshal.GetDelegateForFunctionPointer(NativeFunction, typeof(NativeInvoker)) as NativeInvoker; // Получаем значение експортируемой функции, используя объект делегата string importedString = nativeInvoker(); // Освобождаем ресурсы Imports.FreeLibrary(hExe); // Выводим значение, полученное из DLL MessageBox.Show(importedString); } } // Объявляем делегат, к которому будет приводиться нужная неуправляемая функция public delegate string NativeInvoker(); /// <summary> /// Импорт необходимых функций Windows API /// Смотрите также документацию по атрибуту DllImportAttribute /// http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemruntimeinteropservicesdllimportattributememberstopic.asp /// </summary> public class Imports { [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string lpFileName); [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)] public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool FreeLibrary(IntPtr hModule); } } |