HI all,
Я хотел бы вызвать из моего кода C # неуправляемые библиотечные функции, как показано ниже.Есть два варианта, и оба работают.В данный момент функция «Beep» проста и не имеет никаких входных / выходных параметров, указателей, ссылок ... Мне интересно в более сложных случаях, каковы преимущества и недостатки обоих подходов?
Спасибо, Милан.
[DllImport("kernel32.dll")]
public static extern bool Beep(uint iFreq, uint iDuration);
public void TestBeep()
{
Beep(300, 3000);
}
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);
public void BeepIt()
{
IntPtr kernel32 = LoadLibrary("Kernel32.dll");
IntPtr procBeep = GetProcAddress(kernel32, "Beep");
DelegBeep delegBeep = Marshal.GetDelegateForFunctionPointer(procBeep, typeof(DelegBeep)) as DelegBeep;
delegBeep(50, 1000);//Hz,ms
}