如题,除了DllImport的这种静态的方法
高手帮忙,怎样使用Windows API函数LoadLibrary,GetProcAddress,CallWindowProc执行C++编写的DLL中的方法,
主要是怎样用CallWindowProc实现Dll中的功能,谢谢!!!

解决方案 »

  1.   

    既然是API,在C#也是一样用的
      

  2.   

    在API中CallWindowProc的原型是:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
    );那么在C#中怎样声明CallWindowProc 我编写的部分代码是:
    string[] files = Directory.GetFiles(Application.StartupPath, "tt.dll");
    foreach(string file in files)
    {
      hModule = LoadLibrary(file);
      farProc = GetProcAddress(hModule,"Add");//Dll中有一个用C++编写的类,类中有一个函数Add
      CallWindowProc(*, *, *, *, *);
    }CallWindowProc中的各个参数分别代表什么,怎样将farProc和Add的参数等信息传进去,让其执行?
      

  3.   

    参考:
    http://www.microsoft.com/china/msdn/library/langtool/vcsharp/csharp05162002.mspx   
      http://blog.csdn.net/dragonsuc/archive/2003/06/30/20791.aspxtry   
      {   
      //動態加載dll文件,   
      string   sDllName   =   ServiceId.Substring(0,ServiceId.IndexOf("."));   
      Assembly   DllAssembly   =   Assembly.Load(sDllName);   
      //執行選定的類別   
      ISDServer.ITransaction   Tx   =   (ISDServer.ITransaction)DllAssembly.CreateInstance(sDllName+".Transaction");   
      return   Tx.Execute((ISDServer.IProcess)this,ServiceId,oType,sParam); 
    如下也可以:   
      string   DllPath   =   Application.StartupPath   +   @"\someDLL.dll";   
      System.Reflection.Assembly   assmble   =   System.Reflection.Assembly.LoadFile(DllPath);   
        
      Type   tmpType   =   assmble.GetType("someDLL.ClassA");   
      System.Reflection.MethodInfo   tmpM   =   tmpType.GetMethod("Add");   
      object   tmpobj   =   assmble.CreateInstance("someDLL.ClassA");   
      int   i   =   (int)tmpM.Invoke(tmpobj,   new   object[]{2,3});   
        
      ----------ClassA的定义--------------------   
      using   System;   
        
      namespace   someDLL   
      {   
      ///   <summary>   
      ///   ClassA   的摘要说明。   
      ///   </summary>   
      public   class   ClassA   
      {   
      public   ClassA()   
      {   
      //   
      //   TODO:   在此处添加构造函数逻辑   
      //   
      }   
        
      public   int   Add(int   a,   int   b)   
      {   
      return   a+b;   
      }   
      }   
      }   
        
      

  4.   

    回4楼:我要实现的是用C#调用C++编写的DLL中的方法,并且利用反射好像不能调用C++编写的DLL,不能对C++编写的类进行实例化,是否有其他的方式来实现调用C#本身编写DLL中使用反射方法的方式呢?要调用用C++编写DLL中的类