Это - возможное отражение использования и.NET C# для вызывания динамически другой функции (с аргументами) записанный в C или C++, прежде чем.NET прибыла (неуправляемый код)?
И smole C# пример, если это возможно, ценился бы!
Спасибо!
Бром, Милан.
Да, динамический вызов P / Invoke возможен в .NET с использованием Marshal.GetDelegateForFunctionPointer
. См. Следующий пример, взятый из раздела Делегаты и указатели на неуправляемые функции из статьи Написание небезопасного кода C # 2.0 Патрика Смаччиа:
using System;
using System.Runtime.InteropServices;
class Program
{
internal delegate bool DelegBeep(uint iFreq, uint iDuration);
[DllImport("kernel32.dll")]
internal static extern IntPtr LoadLibrary(String dllname);
[DllImport("kernel32.dll")]
internal static extern IntPtr GetProcAddress(IntPtr hModule,String procName);
static void Main()
{
IntPtr kernel32 = LoadLibrary( "Kernel32.dll" );
IntPtr procBeep = GetProcAddress( kernel32, "Beep" );
DelegBeep delegBeep = Marshal.GetDelegateForFunctionPointer(procBeep , typeof( DelegBeep ) ) as DelegBeep;
delegBeep(100,100);
}
}
Существует также другой метод, описанный Джунфэном Чжаном, который также работает в .NET 1.1:
Отражение работает только с управляемым кодом.
В зависимости от того, какой на самом деле неуправляемый код, вы можете использовать COM-взаимодействие (для компонентов com) или PInvoke (для dll старого стиля) для вызова неуправляемого кода. Возможно, вы можете написать оболочку вокруг неуправляемого кода, чтобы это стало возможным.