C++/CLI中有效使用非托管并列缓存

分类: VC.NET   出处:iocblog整理  更新时间:2008-12-28   添加到收藏  

  visual studio安装程序会把visual studio的共享库放在一个称为"并列缓存(side-by-side cache)"的地方,那怎样才能有效地利用它呢?

  在文章开头,先看一个示例。在命令行中,创建一个c++源文件,输入例1中的代码。(虽然此处使用的是c++/cli语法,但不管你是用c++/cli、托管c++、或本地c++,都不影响要讲解的主题。)

  例1:lib.cpp

 

using namespace system;
public ref class test
{
 public:
  void callme()
  { 
   console::writeline("called me");
  }
};


  将其编译为一个托管库程序集:

 

cl /clr /ld lib.cpp


  在此要多留意,我们是使用了混合模式(/clr)来编译此代码,当然了,如果适当修改,也能以旧式托管c++语法(/clr:oldsyntax)来编译。

  下一步,创建一个调用此库的c#程序(例2),当然也可以使用visual basic.net,不过c#更好一点。再与库一起编译:

  例2:

 

using system;

class app
{
 static void main()
 {
  test test = new test();
  test.callme();
 }
}

csc app.cs /r:lib.dll


  运行此程序,会抛出一个异常:

 

unhandled exception:
system.io.filenotfoundexception:
the specified module could not be found.
(exception from hresult: 0x8007007e)
at app.main()


  怎么会这样呢?打开程序所在的目录,库也在那啊。hresult的高位字为0x8007,其代表facility_win32,也就是说,这是一个win32错误;低位字以十进制表示为126,在winerror.h中列明其代表error_mod_not_found。如果loadlibrary不能查找到某个模块,才会返回这个错误结果,因此,现在非常清楚了,这个错误表示不能查找到一个非托管的dll。

[1] [2] [3] 下一页



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。