首页 新闻 会员 周边

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

1
悬赏园豆:50 [已解决问题] 解决于 2010-08-05 16:16

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

紫竹林的主页 紫竹林 | 初学一级 | 园豆:120
提问于:2010-08-01 13:17
< >
分享
最佳答案
0

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

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

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2010-08-01 16:59
与我生成的这个dll相关的dll文件只是.net的组件(mscoree.dll),是自动加载的,应该不是这个问题。网上很多人说是matlab本身的版本问题,难道是vs2005不能使用R2009a生成的DLL?
紫竹林 | 园豆:120 (初学一级) | 2010-08-01 17:19
@紫竹林:你是说你用matlab编写了一个基于.net framework的dll?我还以为是非托管的共享MFC DLL呢! 那你把你生成的那个dll发给我,我帮你看看. wl@txsec.com.
Launcher | 园豆:45045 (高人七级) | 2010-08-02 09:07
因为我这里没有 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")
Launcher | 园豆:45045 (高人七级) | 2010-08-03 08:52
其他回答(1)
0

请问,你的那个问题怎么解决的,我遇到的和你的一样,不知道如何解决

liu_zl | 园豆:205 (菜鸟二级) | 2011-07-29 08:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册