请问,如何根据配置文件动态调用使用C++写的win32函数。谢谢。

解决方案 »

  1.   

    首先必须用dllimport去声明win32函数,至于如何调用,或者根据什么条件来调用,是你程序细节处理问题。
      

  2.   

    [DllImport("user32.dll", EntryPoint="SetCursorPos")]
    public static extern int SetCursorPos (
    int x,
    int y
    );調用時
    SetCursorPos(Screen.PrimaryScreen.WorkingArea.Width / 2 - 10,Screen.PrimaryScreen.WorkingArea.Height / 2 + 10);
      

  3.   

    可以通过CodeDom Emit 出那个函数
      

  4.   

    创建一个动态的程序集,然后通过TypeBuilder.DefinePInvokeMethod 这个方法给类型加上函数然后就可以使用创建的类型调用了
      

  5.   

    打只说DllImport的人的PP,DllImport传入的DLL名只能是常量,无法根据配置文件来传DLL文件名。至于CodeDOM和Emit有点重了。我准备用VC写个DLL,在这个DLL里动态去加载原来在.NET程序中需要加载的DLL。有没有其他方式呢?
      

  6.   

    to 打只说DllImport的人的PP,DllImport传入的DLL名只能是常量,无法根据配置文件来传DLL文件名。至于CodeDOM和Emit有点重了。我准备用VC写个DLL,在这个DLL里动态去加载原来在.NET程序中需要加载的DLL。有没有其他方式呢?其实dll文件你是知道的,每个dll文件中的函数你也是知道的,只不过是想程序调用的时候,根据环境不同而去选择某个dll中的某个函数,那么只要环境确定了,那么相应的dll以及其函数也是确定的。
    那么dllimport是可以实现你想要的功能,只不过要把每个dll中的所有函数都要声明出来,这样你就可以根据不同环境来选择执行不同dll的函数。虽说这样不像vc调用那么简洁,尤其是在调用不同dll中实现同一种方法的时候。
      

  7.   

    这里有讲动态调用dll的,http://bugkiller.blogchina.com/4919047.html,看看吧
      

  8.   

    参见
    http://www.aspxboy.com/private/showthread.asp?threadid=369