通过托管代码访问非托管代码

happymanlxj 2007-11-19 04:59:48
我先说一下我的项目的思路:我是想通过托管代码访问非托管代码,首先通过类似与如下的代码编译生成托管代码的dll文件。
[DllImport("C:\\Program Files\\VNI\\imsl\\cnl600\\vc98pc\\lib\\imslcmath_dll.dll", EntryPoint = "imsl_d_lin_sol_gen",
ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
unsafe static extern double* imsl_d_lin_sol_gen(int n, double[] a, double[] b, int IMSL_RETURN_USER, double[] x, int zero);


再通过调用托管代码的dll文件来调用函数,如imsl_d_lin_sol_gen。

按这种方式我先尝试了imslcstat中不带指针的函数,因为这类不需要不安全编译,也确实成功了!后来我就开始尝试有指针的函数,对代码进行了不安全编译方面的修改,但没取得成功!我再改回来,不知是什么忘了改回来还是其它什么原因,结果以前能调用的不带指针的函数也调用不了了!

请帮我分析一下是什么原因,怎么解决,比较急,谢谢!

现在出现的错误描述是:

由通过反射调用的方法引发的异常。

无法找到DLL导入中指定的DLL时引发的异常。

我的理解是无法从托管文件访问托管文件中指定的DLL文件,而那个文件在指定的位置确实是存在的,就不知是什么原因了?

注:那个软件的授权没有问题!

...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flarejune 2007-11-19
  • 打赏
  • 举报
回复
把imslcmath_dll.dll 复制到你的程序目录,然后DllImport("imslcmath_dll.dll")试下
happymanlxj 2007-11-19
  • 打赏
  • 举报
回复
我现在是调用不带指针的都会出错!

至于你说的 "无法找到DLL导入中指定的DLL时引发的异常 ".
你把文件复制到同一个目录看看..

这是什么意思?
flarejune 2007-11-19
  • 打赏
  • 举报
回复
对于非托管内存的访问,你不应该使用double * 而应该使用IntPtr 获得起始地址,然后使用Marshal类进行访问操作...
比如Marshal.GetTypedObjectForIUnknown();等等,具体参考下Marshal类的帮助吧,
至于你说的"无法找到DLL导入中指定的DLL时引发的异常".
你把文件复制到同一个目录看看..
happymanlxj 2007-11-19
  • 打赏
  • 举报
回复
DLL为win32的DLL

110,536

社区成员

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

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

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