晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
2 |7 G8 d4 ?! X: ?0 ^7 t$ L
( l/ A8 n. e3 l$ T" W& N/ X
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
! N. c1 ^" i7 [; u
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
! ~; R; O+ Y5 N/ k; x& f: w* _, P
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
) b3 y; a2 ?0 C2 |+ N L
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
% G' I8 U, T+ @+ M
manifestVersion="1.0">
$ z' l9 `% w- ^3 K* O( J
<dependency>
( v3 h1 V: e* Q
<dependentAssembly>
) R& }) p2 m/ z
<assemblyIdentity type="win32"
% i {5 K3 Y8 r0 [; g& w
name="Microsoft.VC80.DebugCRT"
4 Q8 W( U0 g5 J/ @ X6 U
version="8.0.50608.0"
. l6 p+ ^! M! n
processorArchitecture="x86"
: N o* _$ R4 Q7 w+ C) G
publicKeyToken="1fc8b3b9a1e18e3b">
- M8 \- [+ m! A% t, U0 P" Q4 Y
</assemblyIdentity>
+ g: ~! b3 I! I2 Y" }# e
</dependentAssembly>
$ Q6 q0 N, y- P$ G$ J6 z& {2 l
</dependency>
5 i, |1 u, [" L- L
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
( f0 ^1 `' Y, y7 `" C9 ?: l8 w! a
4 [3 @: S9 `/ O( ^2 h
2 k: @- J* f7 L
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
( z. b$ y; {; i0 z3 z
感谢此博文博主
http://www.zeali.net/entry/476
9 d# ?8 X3 {5 G3 P7 m% h; w* F/ I0 a
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2