C# 调用.dll时的问题

bolv6666 2007-06-04 09:14:35
现在有一个由Fortran编译成的.dll,我已经将它放在了Bin目录下(最后在system32中也拷贝了一份),然后由c#调用它里面的函数,声明方式如下;

[DllImport(".\\Dll1.dll", CallingConvention = CallingConvention.StdCall,EntryPoint="Circle_Area")]
public static extern float Circle_Area(ref float r);

但在调用该函数的时候,出现如下错误:

未处理的“System.DllNotFoundException”类型的异常出现在 CS_for_dll.exe 中。
其他信息: 无法加载 DLL“.\Dll1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

为什么会找不到呢?
...全文
432 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlegang 2007-06-08
  • 打赏
  • 举报
回复
关注
好像是存在这个问题
bolv6666 2007-06-06
  • 打赏
  • 举报
回复
各位,上面的方法我都试过了,但还是不行,是不是03和05之间的版本问题啊?
Prince_vegeta 2007-06-05
  • 打赏
  • 举报
回复
首先要导入一个namespace,以便简化后面的代码输入:
using System.Runtime.InteropServices;
其次要使用DllImport引入API函数,如:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
现在就可以使用了,如:
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);


我一般都是这么用的,你再检查检查DLL里的那个方法吧.
shaopingnj 2007-06-05
  • 打赏
  • 举报
回复
你的 VC里面的动态库要加上c_等的,你到网上再搜索一下,我忘记了
bolv6666 2007-06-05
  • 打赏
  • 举报
回复
" dll1.dll又调用了或者依赖于其它dll?"---dll1.dll确实调用了其他的dll,但我把其他的一起拷到bin目录下了,应该没事了吧?

"Circle_Area这个方法可能在dll中没有,或者是错了"----Circle_Area确实有,而且函数名我用depends.exe查看过了,就是这个名字

"路径有可能不对"------路径我也试过绝对路径,但不行

还有就是这个程序原来是在Visual studio 2003下编译并使用的,现在我该在2005下使用,会不会是这里的问题哦?
  • 打赏
  • 举报
回复
LQknife 2007-06-05
  • 打赏
  • 举报
回复
帮顶
littlegang 2007-06-04
  • 打赏
  • 举报
回复
DllImport(".\\Dll1.dll", ...

DllImport("Dll1.dll", 应该就可以了,
不要用.\\,可能会在当前目录而不是bin子目录下找了
周公 2007-06-04
  • 打赏
  • 举报
回复
路径有可能不对
哈哈007哈 2007-06-04
  • 打赏
  • 举报
回复
Circle_Area这个方法可能在dll中没有,或者是错了
littlegang 2007-06-04
  • 打赏
  • 举报
回复
dll1.dll又调用了或者依赖于其它dll?
bolv6666 2007-06-04
  • 打赏
  • 举报
回复
" DllImport("Dll1.dll", 应该就可以了, "

我已经这样试过了,但还是不行,应该不是这里的问题吧,期待大家的解答

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧