CSDN-CSDN社区-移动平台-Windows Mobile

收藏 VS2005调用C++的智能设备DLL,老是无法找到PInvoke DLL,高手进来救救小弟呀!!!!!!!!!!!!!!!!!!!!!!![问题点数:20,结帖人:jicey]

  • jicey
  • (jicey)
  • 等 级:
  • 结帖率:
楼主发表于:2007-11-28 16:21:28
我用VS2005编译了一个C++的DLL,是智能设备用的,类型是MFC扩展DLL。在我的C#项目里调用DLL中的函数,首先把DLL放在我的项目的bin/debug下,然后using System.Runtime.InteropServices;
声明:
[DllImport("wwstest.dll")]
public static extern void Dcm2Bmp(string pFileName);
调用时:
Dcm2Bmp("My Documents\\ct1.dcm");
在PocketPC2003模拟器上调试时,一执行到这里就提示:无法找到PInvoke DLL“wwstest.dll”。
在网上查了大量资料,下面是我尝试的解决方法:
(1)我把[DllImport("wwstest.dll")]改成绝对地址:[DllImport(@"\ProgramFiles\Pocketdicom\wwstest\wwstest.dll")]也不行。
(2)有人说要把DLL放到system32下,复制过去以后,还是不行
(3)有人说可以把DLL添加成引用,但我添加引用,添加不上
(4)我又试着把那个DLL放在我的项目的bin下,不行,甚至把DLL放到模拟器的程序目录下面了,还是不行,几乎什么招都使了,还是不行呀。
到底怎么回事呢?有哪位大虾能指点一下小弟吗?感激不尽呀!!
回复次数:12
#1楼 得分:0回复于:2007-11-29 13:58:10
类型是MFC扩展DLL

C#  不支持MFC类,所以调用失败
#2楼 得分:0回复于:2007-11-29 14:26:46
尝试放在Emulator里的\Windows目录(系统目录)下。
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#3楼 得分:0回复于:2007-11-29 15:52:18
To dyw:
不行呀,我把DLL放到\Windows下还是不行,然后用绝对路径:[DllImport(@"\Windows\wwstest.dll")]还是找不到DLL呀
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#4楼 得分:0回复于:2007-11-29 16:17:14
To BBirdlyh:
  对呀,我的DLL是原来一个应用程序改编的,我在VS2005新建了一个智能设备的MFC扩展DLL,并编译成功,难道还不能在PocketPC上用?那我该怎么办呢?怎样让智能设备支持MFC呢?能说得详细一点吗?谢谢大哥。
#5楼 得分:16回复于:2007-11-29 16:47:19
静态连接MFC
选错工程了

扩展MFC,是动态连接MFC库的,C#里面又没有MFC库,肯定加载失败。
#6楼 得分:4回复于:2007-11-29 16:54:55
加载系统的DLL是否能成功?然后将你的dll放到同样的位置...
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#7楼 得分:0回复于:2007-11-29 21:17:10
To BBirdlyh:
  按您说的,是我的DLL的问题?我这个DLL最初是一个C++的应用程序,有界面,能独立运行。我想在我的C#项目里调用其中的核心函数完成一些功能,所以我考虑把界面去掉做成一个DLL,设置好入口函数以供调用。一开始是让一个朋友帮我做的,他用EVC编译成功,并在模拟器里调用成功,但我手头没有EVC,又考虑我的项目是在VS2005下的,所以我决定用VS2005重新编译一下,于是在VS2005下新建项目,Visual C++--智能设备--MFC智能设备DLL,然后取名wwstest,确定,出现“MFC智能设备DLL向导”界面,平台选择的是Pocket PC2003,然后是选择DLL类型,有三个:使用共享MFC DLL的规则DLL、带静态链接MFC的规则DLL、MFC扩展DLL,一开始我选的“带静态链接MFC的规则DLL”,然后把朋友的源码粘贴到相应项目中,出现了19个错误,怎么调时都没法消除,最后一问原来要选“MFC扩展DLL”,重新选择,按前面的步骤做,还是不行,网上查,原来是缺少一个.lib库,我找到并链接上,运行成功,然后我就把wwstest.dll复制到我的项目中准备调用,并出现了本贴的问题。
  这是我的全过程,哪里出错了呢?还望大哥不吝赐教呀,小弟在此拜谢了!!!!!!!!!
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#8楼 得分:0回复于:2007-11-29 21:22:52
To  dyw:
    不行的,调用系统的DLL可以,系统DLL在\Windows\下,但我把我的DLL放到Windows\下也不行呀
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#9楼 得分:0回复于:2007-11-30 19:12:05
两天了,还没弄好,快疯了,大哥帮帮忙呀
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#10楼 得分:0回复于:2007-12-03 11:35:11
唉,怎么没人了呢?自己顶一下吧
  • jicey用户头像
  • jicey
  • (jicey)
  • 等 级:
#11楼 得分:0回复于:2007-12-04 08:51:10
问题终于解决了,终于可以找到DLL了,正如BBirdlyh所说,原来不是DLL放置和路径的问题,而是DLL本身的问题,应该选静态链接的类型。感谢BBirdlyh和dyw的热心相助,结贴!!

#12楼 得分:0回复于:2009-12-24 10:49:30
我也遇到同样得问题,希望 jicey 帮忙解决下啊。
我得生成dll的时候设置得是"带静态链接MFC的规则DLL".但是“调试”得时候,仍然出现“找不到PInvoke dll”得错误。