C++/CLI中有效使用非托管并列缓存
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。
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。