C# 调C++ dll文件.报:无法加载XXX.dll,找不到指定模块

emine1003Z 2011-01-20 01:19:17
是用Dllimport调用的

[DllImport("EncrySign.dll", EntryPoint = "GenSimpleKey")]
public static extern string GenSimpleKey(int dwLen);

private void button1_Click(object sender, EventArgs e)
{
string s =GenSimpleKey(10);
MessageBox.Show(s);
}



就出现无法加载XXX.dll,找不到指定模块
把DLL放在System32下尝试也不行,给的指定路径还是找不到
各位大侠有什么好招?
...全文
1865 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
pirate1986 2011-09-14
  • 打赏
  • 举报
回复
我也遇到这样的问题,把DLL文件放到项目文件夹的bin文件夹的debug里面就可以了,我自己写一个简单的DLL测试是可以的,但是用公司的DLL就是无法加载或者找不到函数入口点,郁闷
ls251544415 2011-01-30
  • 打赏
  • 举报
回复
可执行文件就是代码生成的.exe文件
ls251544415 2011-01-30
  • 打赏
  • 举报
回复
我也添加过,但是没出现LZ的问题
我是直接把DLL文件直接复制到生成的可执行文件的同一个文件夹中,就可以成功调用了
LZ试试
tigion 2011-01-24
  • 打赏
  • 举报
回复
把c#默认调用 dll是放在system32里边啊 注册一下
emine1003Z 2011-01-24
  • 打赏
  • 举报
回复
现在是找不到入口的函数
给定的函数名称是没有的问题的
你可以从上图中看出,他的函数名称前后全是非法字符

是不是非法字符导致问题所在.
这个问题怎么解决?
emine1003Z 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tigion 的回复:]
把c#默认调用 dll是放在system32里边啊 注册一下
[/Quote]

是VC++写的DLL
不是COM ATL C++
wangsong145 2011-01-20
  • 打赏
  • 举报
回复
如果楼主的C++的dll不依赖于其他的dll的话那你直接放在c#的执行目录下就可以了,如果引用了其他的dll,就需要使用depend工具查看都引用了哪些DLL,然后都放置在C#执行目录下就可以了
  • 打赏
  • 举报
回复
命令行下用 dumpbin /exports EncrySign.dll,看看导出的函数有没有名为GenSimpleKey的
别说你不知道dumpbin
rabbitlzx 2011-01-20
  • 打赏
  • 举报
回复
不是很清楚了,胡乱猜测一下:
1、是不是需要32位的dll却只找到了64位的,或者相反
2、显示出来的函数名字是经过“修饰”了的,前后都有一些字符,你看下c++里导出函数的调用约定是什么,改成stdcall好用么
emine1003Z 2011-01-20
  • 打赏
  • 举报
回复


就是这种情况
rabbitlzx 2011-01-20
  • 打赏
  • 举报
回复
然后顺便在depends里看看你要的函数的名字到底是什么
rabbitlzx 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhangtong9884 的回复:]

引用 4 楼 findcaiyzh 的回复:
用Dependency Walker看看是不是有依赖的dll找不到。

http://www.dependencywalker.com/



用它是提示了:
错误: 发现不同 CPU 类型的模块。
警告: 由于在延时加载依赖模块中丢失导入函数,至少有一个模块具有不能解析的导入。

但是它没有报错的DLL文件名字,纠结
[/Quote]
你展开它引用的DLL列表,有问题的DLL会有错误标识
emine1003Z 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 findcaiyzh 的回复:]
用Dependency Walker看看是不是有依赖的dll找不到。

http://www.dependencywalker.com/
[/Quote]


用它是提示了:
错误: 发现不同 CPU 类型的模块。
警告: 由于在延时加载依赖模块中丢失导入函数,至少有一个模块具有不能解析的导入。

但是它没有报错的DLL文件名字,纠结
emine1003Z 2011-01-20
  • 打赏
  • 举报
回复
现在突破性进展了

出现了:
无法在 DLL“EncrySign.dll”中找到名为“GenSimpleKey”的入口点。

我在VC6.0上运行的DLL程序集,函数GenSimpleKey这是没有问题的
但是他现在就是找不到了.
为什么?
rabbitlzx 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 findcaiyzh 的回复:]

用Dependency Walker看看是不是有依赖的dll找不到。

http://www.dependencywalker.com/
[/Quote]++
emine1003Z 2011-01-20
  • 打赏
  • 举报
回复
绝对路径试过的
是不行的
问题应该就是它本身关联到了系统的其他dll文件

rczjp 2011-01-20
  • 打赏
  • 举报
回复
[DllImport(@"C:\XX\EncrySign.dll")]绝对路径试试
不过放在System32是没有问题的
可能是有其他关联的DLL
  • 打赏
  • 举报
回复
EncrySign.dll中又调用了其它的Dll,你要都有才行,不建议放在System32目录,就放可执行文件所在的目录,更不要注册COM,这叫环保
zhaoxialx 2011-01-20
  • 打赏
  • 举报
回复
估计是放的位置不对吧,你在其他地方也复制一下看看。之前我也是这么引用的,各个路径下都试了一遍才找到。
emine1003Z 2011-01-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 leo_888 的回复:]
你为什么不在工程中直接引用?
[/Quote]

VC dll
是不能被C#直接引用的
它不是有效程序集和COM组件
加载更多回复(4)
*** v3.1.1 更新 *** > 增加导出纯 C 函数的动态链接库 HPSocket4C.dll: ----------------- 1.增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dll 2.导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocket 3.HPSocket4C.dll 使用方法 方法一: ------------------------------------------------------------------------------ (0) (C/C++ 程序)包含 HPSocket4C.h 头文件 (1) 用 ::Create_HP_XxxListener() 函数创建监听器对象 (2) 用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象 (3) 用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回函数 (4) 用相关导出函数操作 HPSocket 对象 (5) ...... ...... (6) 用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象 (7) 用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象 方法二: ------------------------------------------------------------------------------ (1) 应用程序把需要用到的导出函数封装到特定语言的包装类中 (2) 通过包装类封装后,以面向对象的方式使用 HPSocket 4.动态链接库发行版本 (1) x86/HPSocket4C.dll - (32位/MBCS/Release) (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug) (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release) (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug) (5) x64/HPSocket4C.dll - (64位/MBCS/Release) (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug) (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release) (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug) > 全面启用 Buffer Pool 缓存机制:
1.订单管理界面: 分为作业计划和生产派工两部分,作业计划部分可由操作人员下订单,然后执行订单。订单的种类包括加工订单,检测订单,拧螺丝订单,轴承压装订单4种,四种订单分别对应不同的流程操作,具体内部流程操作请见第三章。生产派工的功能主要是操作人员可以在人工操作台向立库进行上料,或者从立库下料所需的货物。 注:对于轴承托盘C和螺钉托盘D,上料的时候需要给定“数量”这一参数。 2.生产概况界面: 这里主要显示立库,AGV,生产区机器人,检测区机器人和装配区机器人以及人工上下料台的一些状态信息。AGV方面,显示AGV的通信状态,以及其位置状态,位置状态分为三种:已收到消息,在XXX处取货完毕,在XXX处卸货完毕。立库方面,显示立库的通信状态,以及操作状态。操作状态有四种:已收到消息,已出库,已入库,已侧边出库。对于加工区,检测区,装配区,以及人工上下料区,显示各个区域的通信状态,区域的有无托盘状态和区域机器人的工作与否的状态。 3.历史记录界面: 此界面可以查询到我们下发的并执行成功的订单数据,另外我们也可以查询到之前的零件的检测数据。并能够生成Excel表供工作人员打印保存。
MICROSOFT 基础类库 : ZLG_UDS_DEMO 项目概述 应用程序向导已为您创建了此 ZLG_UDS_DEMO 应用程序。此应用程序不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写应用程序的起点。 本文件概要介绍组成 ZLG_UDS_DEMO 应用程序的每个文件的内容。 ZLG_UDS_DEMO.vcxproj 这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。 ZLG_UDS_DEMO.vcxproj.filters 这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。 ZLG_UDS_DEMO.h 这是应用程序的主头文件。 其中包括其他项目特定的标头(包括 Resource.h),并声明 CZLG_UDS_DEMOApp 应用程序类。 ZLG_UDS_DEMO.cpp 这是包含应用程序类 CZLG_UDS_DEMOApp 的主应用程序源文件。 ZLG_UDS_DEMO.rc 这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源包含在 2052 中。 res\ZLG_UDS_DEMO.ico 这是用作应用程序图标的图标文件。此图标包括在主资源文件 ZLG_UDS_DEMO.rc 中。 res\ZLG_UDS_DEMO.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 应用程序向导创建一个对话框类: ZLG_UDS_DEMODlg.h、ZLG_UDS_DEMODlg.cpp - 对话框 这些文件包含 CZLG_UDS_DEMODlg 类。此类定义应用程序的主对话框的行为。对话框模板包含在 ZLG_UDS_DEMO.rc 中,该文件可以在 Microsoft Visual C++ 中编辑。 其他功能: ActiveX 控件 该应用程序包含对使用 ActiveX 控件的支持。 其他标准文件: StdAfx.h, StdAfx.cpp 这些文件用于生成名为 ZLG_UDS_DEMO.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准头文件,可用于定义新的资源 ID。Microsoft Visual C++ 将读取并更新此文件。 ZLG_UDS_DEMO.manifest Windows XP 使用应用程序清单文件来描述特定版本的并行程序集的应用程序依赖项。加载程序使用这些信息来从程序集缓存中加载相应的程序集,并保护其不被应用程序访问。应用程序清单可能会包含在内,以作为与应用程序可执行文件安装在同一文件夹中的外部 .manifest 文件进行重新分发,它还可能以资源的形式包含在可执行文件中。 其他注释: 应用程序向导使用“TODO:”来指示应添加或自定义的源代码部分。 如果应用程序使用共享 DLL 中的 MFC,您将需要重新分发 MFC DLL。如果应用程序所使用的语言与操作系统的区域设置不同,则还需要重新分发相应的本地化资源 mfc110XXX.DLL。 有关上述话题的更多信息,请参见 MSDN 文档中有关重新分发 Visual C++ 应用程序的部分。

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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