C#程序调用非托管的DLL MSDN 上的案例是
[DllImport("avifil32.dll")]
public static extern void AVIFileInit();而且强调 在这种情况下,该方法还必须声明为 static那N个用户在同时调用AVIFileInit()时 不会冲突吗?

解决方案 »

  1.   

    DllImport的原理没考证过,我猜测也实际是这个过程:
    LoadLibrary
    GetProcessAddress
    GetDelegateByFunctionPoint
    你使用这个委托,每个使用的地方都会执行一次LoadLibrary,所以不会冲突。如果你都访问了同一个资源,比如串口,并口,指定的文件,则可能会需要互斥,看实际情况。
      

  2.   

    忘记回答第二个了。
    很简单给你说一下,希望你能明白。
    你知道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)
      

  3.   

    明白了 如果是有LoadLibrary 那就不会冲突了 谢谢指教 ^_^