晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
! R$ b! l3 }6 y2 {. D5 V" I6 T, T9 s
6 Z4 v# C# n9 x. G" L
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
7 F- k6 S4 N! L* f- L
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
& h: Y/ I( N# p# J
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
0 O5 l; @0 \: d) C
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
% H7 ^( l8 v$ @" J. C1 f
manifestVersion="1.0">
9 }) L d( y3 u J v
<dependency>
9 E+ c7 ?4 v/ q% \0 h$ B) m
<dependentAssembly>
- B" O3 b( ]& R- E
<assemblyIdentity type="win32"
4 `: m$ A. `, q: O/ [ A y" [
name="Microsoft.VC80.DebugCRT"
% t; h; n1 s- r& G
version="8.0.50608.0"
& z: T* j3 D. e9 t6 T3 P& g
processorArchitecture="x86"
4 m! l) G3 j: m" h4 U5 d
publicKeyToken="1fc8b3b9a1e18e3b">
3 y9 S- U$ F& Q$ o
</assemblyIdentity>
! I4 W7 G. U) K- }" I
</dependentAssembly>
8 ^7 a/ l! T' \# @' ?- T F* O
</dependency>
, U( e: ]( M) A$ ?7 R" }
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
1 O$ x* b& u8 S+ }8 S/ m$ V
0 Q1 O/ n* c# A( @% U1 p
; e5 x; n0 Q. G) Q: W" N: M' {
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
2 n! w! S0 W: K9 M8 ^- A
感谢此博文博主
http://www.zeali.net/entry/476
/ ]9 G7 ?1 a% {" X0 r
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2