C#程序调用非托管的DLL MSDN 上的案例是
[DllImport("avifil32.dll")]
public static extern void AVIFileInit();而且强调 在这种情况下,该方法还必须声明为 static那N个用户在同时调用AVIFileInit()时 不会冲突吗?
[DllImport("avifil32.dll")]
public static extern void AVIFileInit();而且强调 在这种情况下,该方法还必须声明为 static那N个用户在同时调用AVIFileInit()时 不会冲突吗?
LoadLibrary
GetProcessAddress
GetDelegateByFunctionPoint
你使用这个委托,每个使用的地方都会执行一次LoadLibrary,所以不会冲突。如果你都访问了同一个资源,比如串口,并口,指定的文件,则可能会需要互斥,看实际情况。
很简单给你说一下,希望你能明白。
你知道static修饰的方法和不写static修饰的方法有什么不同么?
实际上,标准的pe可执行文件的代码都是被放在一个叫做代码段的特殊内存区域,不可以有软件修改,.net下也应该类似。
非静态方法就是成员方法,成员方法只是隐式的传递了一个this对象而已。那么你dll导出函数,自然不是一个托管对象的成员方法,那只能是static修饰了。public class AA
{
public int value = 5;
public static void Foo(int i){MessageBox.Show(i.ToString());}//1
public void Foo(int i){MessageBox.Show((i+this.value).ToString());}//2
}
2最终调用的时候是Foo(this,int i)