晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
2 ?2 G+ T9 @2 l4 M8 p
1 v" @' R" ~& t, ^6 I1 C
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
" U% @, l. p. C. v' ^( j J# c; Y
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
1 t/ n+ P/ c+ L6 t. c% b7 ?& n
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
! d& e: Q. `6 b/ f% [! k
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
* U5 g4 ]6 f, n$ q4 R* r7 }+ C2 M
manifestVersion="1.0">
' V6 v2 t- u# A
<dependency>
8 U0 z E- ]3 L( O3 j2 j$ O" B
<dependentAssembly>
1 A/ p' [2 g! u' |+ z. O9 @1 V
<assemblyIdentity type="win32"
3 o. i5 F+ \/ s) }/ g1 z
name="Microsoft.VC80.DebugCRT"
! s4 X+ F `2 Q
version="8.0.50608.0"
% ?# N8 t# o9 [/ W# m
processorArchitecture="x86"
2 J. F6 |1 p0 h" j
publicKeyToken="1fc8b3b9a1e18e3b">
. I, m" d* r4 }
</assemblyIdentity>
) `: [7 d5 \8 P2 i4 d
</dependentAssembly>
' u* M+ z v3 R
</dependency>
' Q% E# ]9 {- A* e
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
5 a- Z `7 r$ X: @& O
- v8 x5 }! q- t5 q& I) d7 z+ Y$ W
/ f3 }( C8 b$ Y" A) Y
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
6 i4 I, Z! H" p; G+ t+ {
感谢此博文博主
http://www.zeali.net/entry/476
0 }/ a; O' s/ x
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2