C#调用外部dll文件发生异常
“System.BadImageFormatException”类型的未经处理的异常在Xenics.Xeneth.dll中发生如上所示dll文件显示到这一步发生错误XCH...
“System.BadImageFormatException”类型的未经处理的异常在 Xenics.Xeneth.dll 中发生
如上所示
dll文件显示到这一步发生错误
XCHANDLE = (uint)DllImports.XC_OpenCamera(CameraName, StatusCallback, IntPtr.Zero);
在线等,急
dll文件非64位的,于是在32位下尝试,结果还是报错 展开
如上所示
dll文件显示到这一步发生错误
XCHANDLE = (uint)DllImports.XC_OpenCamera(CameraName, StatusCallback, IntPtr.Zero);
在线等,急
dll文件非64位的,于是在32位下尝试,结果还是报错 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏60(财富值+成长值)
1个回答
展开全部
你的dll是托管库还是native 的动态库?
有可能你加载的dll是比你自己程序的.net framework 版本高,也可能你加载的根本就不是一个托管库。
有可能你加载的dll是比你自己程序的.net framework 版本高,也可能你加载的根本就不是一个托管库。
追问
求大神知道一下托管怎么调用
在网上看到的例子是(我的Xenics.Xeneth.dll直接在右侧资源管理器引用里添加的)
[DllImport("Xenics.Xeneth")] //读取动态库文件
public static extern int GetProcAddress(int handle, String funcname);
但是报错int有问题
真不太懂这里,求指导
追答
哦,这种写法是P/Invoke 调用,是.net 托管代码调用非托管动态库(原生动态库)的方法。这种方法被调用的函数的参数类型需要经过.net 框架的封送(marshaling)。
你这里还有一个问题,GetProcAddress 这个函数是在“Xenics.Xeneth.dll”这个动态库中提供的吗?通常我们使用的Windows API GetProcAddress 这个函数是在windows的内核动态库kernel32.dll中提供的。
如果你这个确定是动态库中的同名函数,那么你需要提供函数原型。
如果你要用的是Windows API的 GetProcAddress 这个函数,那么他的参数和返回值都不是 int。他的第一个参数是HMODULE 类型,他的返回值是指针类型,所以对应的C#类型应该都是 IntPtr 。
托管库跟非托管库是两种完全不同的动态库,尽管他们的后缀名都是".dll"。托管库的加载要用Assembly.Load, 非托管库一般用P/Invoke 方法来调用。所以要看你要加载的dll是什么格式的库。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询