帮帮我!!!第一次注册,第一次发帖,无法加载 DLL 本帖最后由 raincylee 于 2009-08-11 11:21:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 帮你顶一下,慢慢来吧我有个问题调试了两天刚刚找到错误了但是这个错误可能会导致整个软件的思路改变~~~~(>_<)~~~~ 很郁闷啊 rapi.dll 是不是这个dll损坏了检查下 网上下个试试有时候重建个项目把代码贴过去或许有用..^_^ ` UP下 c:\windows\system32\rapi.dll文件。是一个同步软件安装的目录。这个dll,是非托管的程序集dll,不能引用到bin目录下。我加到bin目录中。但还是不可以。 非托管的Dll不能这么用,晕! 非托管dll用DllImport调用如[DllImport("kernel32")]public extern static int LoadLibrary(string lpLibFileName); 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 ); //调用窗体其它的就不知道了. 项目-添加w引用- 选中你的DLL 我的项目是B/S的代码.程序在调试是完全正确的.发布后用IIS浏览就出上面的错误了 这样也试了.在调试时LoadLibrary()可以返回一个值.但发布到IIS中,返回值为0.还是不可以用. 引用 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浏览就出上面的错误了 PostMessage的c#用法。。 C# Scoket数据传得太快导致数据丢失 在线等---能不能保存窗体的pictureBox控件中的图片? 如何检验一个类一段时间内是否被触发过 一个C#和VC接口问题 DataGrid和数据绑定后能添加数据,不能删除数据,怎么搞? 请问 在winform中使用 MainMenu 控件时。如何给 c#2个变量值始终都是一样的 大虾,小弟不太明白 System.Data.IDataParameter[] 如何动态加载一个窗体 C# 内存映射 为什么我打包的安装程序运行后是打开桌面
我有个问题调试了两天刚刚找到错误了
但是这个错误可能会导致整个软件的思路改变~~~~(>_<)~~~~
很郁闷啊
检查下 网上下个试试
有时候重建个项目把代码贴过去或许有用..
^_^ ` UP下
[DllImport("kernel32")]
public extern static int LoadLibrary(string lpLibFileName);
[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 ); //调用窗体其它的就不知道了.
这样也试了.在调试时LoadLibrary()可以返回一个值.但发布到IIS中,返回值为0.还是不可以用.
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浏览就出上面的错误了