本帖最后由 raincylee 于 2009-08-11 11:21:08 编辑

解决方案 »

  1.   

    帮你顶一下,慢慢来吧
    我有个问题调试了两天刚刚找到错误了
    但是这个错误可能会导致整个软件的思路改变~~~~(>_<)~~~~ 
    很郁闷啊
      

  2.   

    rapi.dll  是不是这个dll损坏了
    检查下 网上下个试试
    有时候重建个项目把代码贴过去或许有用..
    ^_^  `  UP下
      

  3.   

    c:\windows\system32\rapi.dll文件。是一个同步软件安装的目录。这个dll,是非托管的程序集dll,不能引用到bin目录下。我加到bin目录中。但还是不可以。
      

  4.   

    非托管的Dll不能这么用,晕!
      

  5.   

    非托管dll用DllImport调用如
    [DllImport("kernel32")]
    public extern static int LoadLibrary(string lpLibFileName);
      

  6.   

    RAPI myRapi = new RAPI();//出错位置 非托管中的Dll不能这么使用的, 要先判断你的RAPI是什么类型, 再采用相应的做法.如果是一般的方法调用, 就应该像
    [DllImport("rapi.dll")]
    static public extern void RapiMethod(); 这样使用.而如果rapi.dll中的是一个窗体模块, 则:
    public delegate string CallWindow(int iSign, string strInParameter, ref string strOutParameter);

    [DllImport("Kernel32")]
    public static extern int GetProcAddress(int handle, String funcname);
    [DllImport("Kernel32")]
    public static extern int LoadLibrary(String funcname);
    [DllImport("Kernel32")]
    public static extern int FreeLibrary(int handle); private static Delegate GetAddress(int dllModule, string functionname, Type t)
    {
    int addr = GetProcAddress(dllModule, functionname);
    if (addr == 0)
    return null;
    else
    return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t);
    } //调用部分代码
    huser32 = LoadLibrary("DllWindow.dll"); //你的动态库文件名
    CallWindow CallDlg = (CallWindow)GetAddress(huser32, "CallWindow", typeof(CallWindow));
    CallDlg( 6, strSign, ref str ); //调用窗体其它的就不知道了.
      

  7.   

    项目-添加w引用- 选中你的DLL
      

  8.   

    我的项目是B/S的代码.程序在调试是完全正确的.发布后用IIS浏览就出上面的错误了
      

  9.   


    这样也试了.在调试时LoadLibrary()可以返回一个值.但发布到IIS中,返回值为0.还是不可以用.
      

  10.   

    引用 12 楼 qqiuzaihui 的回复:
    RAPI myRapi = new RAPI();//出错位置非托管中的Dll不能这么使用的, 要先判断你的RAPI是什么类型, 再采用相应的做法.如果是一般的方法调用, 就应该像
    [DllImport("rapi.dll")]
    static public extern void RapiMethod(); 这样使用.而如果rapi.dll中的是一个窗体模块, 则:
    C# codepublicdelegatestring CallWindow(int iSign,string strInParameter,refstring strOutParameter);
           
            [DllImport("Kernel32")]publicstaticexternint GetProcAddress(int handle, String funcname);
            [DllImport("Kernel32")]publicstaticexternint LoadLibrary(String funcname);
            [DllImport("Kernel32")]publicstaticexternint FreeLibrary(int handle);privatestatic Delegate GetAddress(int dllModule,string functionname, Type t)
            {int addr= GetProcAddress(dllModule, functionname);if (addr==0)returnnull;elsereturn Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t);
            }//调用部分代码    huser32= LoadLibrary("DllWindow.dll");//你的动态库文件名    CallWindow CallDlg= (CallWindow)GetAddress(huser32,"CallWindow",typeof(CallWindow));
        CallDlg(6, strSign,ref str );//调用窗体其它的就不知道了.
    谢谢呀!但我的项目是B/S的代码.程序在调试是完全正确的.发布后用IIS浏览就出上面的错误了