为了账号安全,请及时绑定邮箱和手机立即绑定

vs2005引用 matlab R2009a编译的DLL出现问题

vs2005引用 matlab R2009a编译的DLL出现问题

哈士奇WWW 2018-10-10 18:06:02
我写了一个很简单的function,用 matlab R2009a 生成一个DLL,再用C#去引用,一开始实例化类的时候就报错,后来在网上查了一些资料,照着别人说的装了一个东西,现在可以调用了,但是还是弹出一个错误,Runtime Error----------R6034。。有很多人遇到这个问题,但是都说糊里糊涂的就解决了,我试了也不行,请大仙显灵~~
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

没用过matlab编写dll,不过你的问题应该是生成的dll的问题,可以用dependcy看下你的dll引用了哪些别的dll,然后把没有的这些dll拷贝进system32或同目录下。

你的matlab生成的dll应该是共享使用其它dll,而且还得用external C 导出函数。


因为我这里没有 MWArray.dll ,所以无法运行成功,但是通过对 class_dotnet.dll的源码的分析(你也可以用Reflector查看),在Class_dotnet的静态构造函数中, mcr需要一个Stream来创建实例,该Stream通过读取class_dotnet.dll中包含的 class_dotnet.ctf 资源来实例化对象。 由于你的 class_dotnet.dll运行在另一个进程中,所以使用 executingAssembly.GetManifestResourceNames()是无法获取到 class_dotnet.ctf 这个资源文件的,因为 class_dotnet.ctf 存在于 calss_dotnet.dll 程序集中,而非你的调用进程中,可以使用下面的方式修改: AssemblyName refAssemblyName = executingAssembly.GetReferencedAssemblies().FirstOrDefault(o => o.FullName.Contains("class_dotnet")); if (refAssemblyName == null) throw new ArgumentNullException(); Stream manifestResourceStream = Assembly.Load(refAssemblyName).GetManifestResourceStream("class_dotnet.ctf")

查看完整回答
反对 回复 2018-10-15
  • 1 回答
  • 0 关注
  • 353 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信