晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
$ T8 Z9 a! U9 N# q. w
. V/ e2 u( X- U
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
9 L' q6 I2 L; ]& R! m
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
" f: a0 P) r. u# t1 O; r" p
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
0 |. M# K/ q- a( a" U2 f. m0 K/ I
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
% y5 U! X7 u5 z0 e2 O' Q
manifestVersion="1.0">
( A8 K% P/ b+ F8 R+ X' B/ R
<dependency>
9 `% u5 R& C& G2 ^3 H0 p
<dependentAssembly>
9 ^5 C' x0 k7 e, }1 {0 a
<assemblyIdentity type="win32"
8 G v/ {6 G) v/ a: \
name="Microsoft.VC80.DebugCRT"
2 ^& L+ U4 Z6 O: r
version="8.0.50608.0"
, `+ |: |& t. T! Y
processorArchitecture="x86"
- N( A9 }# b" [3 ^: F" n* n. G
publicKeyToken="1fc8b3b9a1e18e3b">
) J! S y2 D, U9 y
</assemblyIdentity>
_+ ^; D& g! n3 l. w; l
</dependentAssembly>
7 x0 Q0 v5 Z+ F; L# P
</dependency>
" K" R3 g/ s; h% H
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
/ T A' {) @7 u- Y. r
5 C" E& I; s, R* c' }
) e; l1 O/ T R" x9 m) D* n* [% z
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
: j& M/ A3 A6 L- ?/ @
感谢此博文博主
http://www.zeali.net/entry/476
, I: d' z, s1 H3 u! ?$ d5 u% R( c
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2