c# 引用 C++ DLL 问题!

HellMoxi 2011-03-24 10:32:43
我现在有一个DLL,叫Qscalculat.dll在D:\test\Qscalculat.dll

引用的代码
[DllImport("d:\\test\\Qscalculat.dll", ExactSpelling = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern void QSCalc1(double f1, double f2, double f4, int m, ref double F, ref double tg, ref double th, ref double tg0, ref double th0, ref double tn0, double tw0, double Fz, double Qz, ref double q, ref double s, int daynum, int totalday);

奇怪的是我在VS2008下,可以正常调用,但是拿VS2010用同样的代码却总是提示找不到模块。 希望大家帮忙看看。 急啊。

谢啦!
...全文
247 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
HellMoxi 2011-03-25
  • 打赏
  • 举报
回复
是的。 有VC6,现在问题是我已经可以连上了,但是怎么就说我找不到程序入口点呢? 参数也对,方法名也对!
018 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hellmoxi 的回复:]
哦, MFC42D.DLL MSVCRTD.DLL

找不到这两个文件。 应该在哪能弄到呢?
[/Quote]

这两个文件应该是在system32下的。


[Quote=引用 8 楼 hellmoxi 的回复:]
莫明其妙滴连上了,但是不知道怎么的又出新问题了。 怎么找不到程序入口点了?

用了N久都没变过,怎么不对了呢?
[/Quote]
找不到程序入口点 看一下d:\\test\\Qscalculat.dll有没有QSCalc1方法,如果有是不是参数不匹配。
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
无法在 DLL“d:\test\Qscalculat.dll”中找到名为“QSCalc1”的入口点。

老机器正常,新机器就不好使了呢?? 刚才找不到DLL的问题不知道怎么就好了。 现在又出现这个问题。
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
莫明其妙滴连上了,但是不知道怎么的又出新问题了。 怎么找不到程序入口点了?

用了N久都没变过,怎么不对了呢?
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
哦, MFC42D.DLL MSVCRTD.DLL

找不到这两个文件。 应该在哪能弄到呢?
018 2011-03-24
  • 打赏
  • 举报
回复
用Depends这个看一下D:\test\Qscalculat.dll引用了那些dll,是不是dll不存在或其他的。
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
3楼理解错了吧,不是工程打不开了。 是里面有一段调用DLL的代码一直是找不到DLL。 但是DLL路径是我写死的,所以目录下是肯定有这个DLL的。 就是不知道为什么不能引用!并且还报错说找不到指定模块!
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
骑了怪了。 老机器2010也好使啊。 看来是我在新机子上少装什么东西了! 是什么呢? 求答案!
spade24 2011-03-24
  • 打赏
  • 举报
回复
会不会是VS2010打开的目录位置发生变化了!
你试一下把VS2010快捷方式文件放到工程目录下。
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
不太清楚, 代码绝对一样,只是通过2010自动给生成了一下代码。

环境只是原来的机子是2008,现在的机子是2010. 其它没啥变化!
bdmh 2011-03-24
  • 打赏
  • 举报
回复
如果代码完全一样的话,机器环境一样吗,是不是有一些东西需要注册啥的
zhouxingyu896 2011-03-24
  • 打赏
  • 举报
回复
MFC42D.DLL MSVCRTD.DLL
这两个文件可以下的
voodoo82 2011-03-24
  • 打赏
  • 举报
回复
MFC42D.DLL MSVCRTD.DLL这些是Debug版的DLL,你可以从老机器上查找这两个文件拷贝过来试试。你老机器是不是装有VC6?
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
[DllImport("d:\\test\\Qscalculat.dll", ExactSpelling = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern void QSCalc1(double f1, double f2, double f4, int m, ref double F, ref double tg, ref double th, ref double tg0, ref double th0, ref double tn0, double tw0, double Fz, double Qz, ref double q, ref double s, int daynum, int totalday);

在老机子上08,10全好使。 新机子就不行。 申明应该没问题,用了N久了!
nbhx2010 2011-03-24
  • 打赏
  • 举报
回复
C#调用c++的dll,需要用C#重新改写一下dll的函数申明吧
HellMoxi 2011-03-24
  • 打赏
  • 举报
回复
确实有这个方法, 源码都没有动过,只是从老机器2008拿到新机器的2010上用的。 老机器的2010也工作正常。 就是在新机器上的2010提示有问题。 代码相同。

110,539

社区成员

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

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

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