VS2005调用C++的智能设备DLL,老是无法找到PInvoke DLL,高手进来救救小弟呀!!!!!!!!!!!!!!!!!!!!!!!

jicey 2007-11-28 04: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放到模拟器的程序目录下面了,还是不行,几乎什么招都使了,还是不行呀。
到底怎么回事呢?有哪位大虾能指点一下小弟吗?感激不尽呀!!
...全文
2588 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATOM81 2012-09-03
  • 打赏
  • 举报
回复
我也遇到同样问题。但我的DLL不是MFC的而是Win32的。怎么办?请各位帮助,谢谢!
jccg20033088999 2011-11-04
  • 打赏
  • 举报
回复
可以请lz解释下怎么解决问题的嘛?
happyxiaowuge 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jicey 的回复:]
问题终于解决了,终于可以找到DLL了,正如BBirdlyh所说,原来不是DLL放置和路径的问题,而是DLL本身的问题,应该选静态链接的类型。感谢BBirdlyh和dyw的热心相助,结贴!!
[/Quote]

什么叫静态链接的类型,要怎么做才叫静态链接的类型...
woaitianguoguo 2010-08-29
  • 打赏
  • 举报
回复
我需要jiecey的帮助,我很急,拜托了,我的qq是229092004
TimKoung 2010-04-08
  • 打赏
  • 举报
回复
在VS里的话,可以右键单击DLL文件选属性里面的“复制到输出目录”
hbg1985 2009-12-24
  • 打赏
  • 举报
回复
我也遇到同样得问题,希望 jicey 帮忙解决下啊。
我得生成dll的时候设置得是"带静态链接MFC的规则DLL".但是“调试”得时候,仍然出现“找不到PInvoke dll”得错误。
jicey 2007-12-04
  • 打赏
  • 举报
回复
问题终于解决了,终于可以找到DLL了,正如BBirdlyh所说,原来不是DLL放置和路径的问题,而是DLL本身的问题,应该选静态链接的类型。感谢BBirdlyh和dyw的热心相助,结贴!!

jicey 2007-12-03
  • 打赏
  • 举报
回复
唉,怎么没人了呢?自己顶一下吧
jicey 2007-11-30
  • 打赏
  • 举报
回复
两天了,还没弄好,快疯了,大哥帮帮忙呀
jicey 2007-11-29
  • 打赏
  • 举报
回复
To dyw:
不行的,调用系统的DLL可以,系统DLL在\Windows\下,但我把我的DLL放到Windows\下也不行呀
jicey 2007-11-29
  • 打赏
  • 举报
回复
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复制到我的项目中准备调用,并出现了本贴的问题。
这是我的全过程,哪里出错了呢?还望大哥不吝赐教呀,小弟在此拜谢了!!!!!!!!!
dyw 2007-11-29
  • 打赏
  • 举报
回复
加载系统的DLL是否能成功?然后将你的dll放到同样的位置...
BBirdlyh 2007-11-29
  • 打赏
  • 举报
回复
静态连接MFC
选错工程了

扩展MFC,是动态连接MFC库的,C#里面又没有MFC库,肯定加载失败。
jicey 2007-11-29
  • 打赏
  • 举报
回复
To BBirdlyh:
对呀,我的DLL是原来一个应用程序改编的,我在VS2005新建了一个智能设备的MFC扩展DLL,并编译成功,难道还不能在PocketPC上用?那我该怎么办呢?怎样让智能设备支持MFC呢?能说得详细一点吗?谢谢大哥。
jicey 2007-11-29
  • 打赏
  • 举报
回复
To dyw:
不行呀,我把DLL放到\Windows下还是不行,然后用绝对路径:[DllImport(@"\Windows\wwstest.dll")]还是找不到DLL呀
dyw 2007-11-29
  • 打赏
  • 举报
回复
尝试放在Emulator里的\Windows目录(系统目录)下。
BBirdlyh 2007-11-29
  • 打赏
  • 举报
回复
类型是MFC扩展DLL

C# 不支持MFC类,所以调用失败
PInvoke插件 RedGate.PInvokeExtension VS平台调用插件 PInvoke 平台调用 调用C++ 调用系统 C#调C++, Search Module: Directory Constants Delegates Enums Interfaces Structures Desktop Functions: advapi32 avifil32 cards cfgmgr32 comctl32 comdlg32 credui crypt32 dbghelp dbghlp dbghlp32 dhcpsapi difxapi dmcl40 dnsapi dtl dwmapi faultrep fbwflib fltlib fwpuclnt gdi32 gdiplus getuname glu32 glut32 gsapi hhctrl hid hlink httpapi icmp imm32 iphlpapi iprop irprops kernel32 mapi32 MinCore mpr mqrt mscorsn msdelta msdrm msi msports msvcrt ncrypt netapi32 ntdll ntdsapi odbc32 odbccp32 ole32 oleacc oleaut32 opengl32 pdh powrprof printui propsys psapi pstorec query quickusb rasapi32 rpcrt4 scarddlg secur32 setupapi shell32 shlwapi twain_32 unicows urlmon user32 userenv uxtheme version wer wevtapi winfax winhttp wininet winmm winscard winspool wintrust winusb wlanapi ws2_32 wtsapi32 xolehlp xpsprint Smart Device Functions: aygshell coredll ipaqutil rapi Glossary distributed computing LibHolocaust Marshaling Marshalling Marshalling PInvoke test pinvoke Show Recent Changes Subscribe (RSS) Misc. Pages Comments FAQ Helpful Tools Playground Suggested Reading Website TODO List Support Forum Download Visual Studio Add-In Terms of Use Privacy Policy Create page PInvoke (glossary) Summary The mechanism provided by the CLR that enables managed code to call static DLL exports. Access PInvoke.net directly from VS: Terms of Use Edit This Page Find References Show Printable Version Revisions Show changes

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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