晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
, d/ c% L: Y5 L- i L
0 d" E; y: E9 C1 X; I) }
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
: S6 c' l2 t8 z" L# \% F
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
' R( V1 C# [6 Z6 U
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
* {& K* Z) s" ]; [
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
5 D" K0 t+ J9 e
manifestVersion="1.0">
6 m5 o# j" o- @& N, G
<dependency>
. C5 k( n; a' x2 P* X
<dependentAssembly>
% H$ V4 c% g9 x2 b9 i3 R, E
<assemblyIdentity type="win32"
6 r: Z% M j8 q3 R& W
name="Microsoft.VC80.DebugCRT"
" R$ T; \6 w, G3 }2 l
version="8.0.50608.0"
# S1 y& C$ t2 E5 f$ m
processorArchitecture="x86"
, r! ^! W$ [0 X2 s/ q+ X0 O' C0 U
publicKeyToken="1fc8b3b9a1e18e3b">
, l+ y# s; ^% Q$ V
</assemblyIdentity>
( ~! o, k8 f' T1 f4 O- q0 [' A: s
</dependentAssembly>
N. `# \$ D. C& Z- a
</dependency>
" `, W6 s4 n0 O# e N
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
+ A; A$ i) w/ ~& M4 c
- J( v( _2 T7 w5 T. ~3 }
) |9 F0 Q# E- r" {% K
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
* {* D& E4 h1 ]+ K2 J; ?
感谢此博文博主
http://www.zeali.net/entry/476
. d4 ?1 R- m! o. o" n5 H( q5 q
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2