晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
4 K$ I( {: g( O# t
) p8 P% a1 V4 O) @+ Z* v7 S, U
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
2 V! I% v$ Q/ ~# h2 i
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
6 C* n+ w# D( z% B
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
. E4 o* F+ \; b7 q$ f
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
7 |4 k0 p. t7 O0 S$ X4 e8 Y, w
manifestVersion="1.0">
5 s# s4 a* m( Z, c5 @6 d, E
<dependency>
7 v* m3 g. Y' [* L: G+ b9 Q, z
<dependentAssembly>
4 A9 I9 |- o/ X9 V: r
<assemblyIdentity type="win32"
9 ~! E/ @+ f9 H4 E# p [7 {9 F
name="Microsoft.VC80.DebugCRT"
! z/ a5 q4 t- [4 L. z
version="8.0.50608.0"
* Q/ S& s( g6 q# Y7 o) Z
processorArchitecture="x86"
% w+ t8 W. f O4 i+ e, K
publicKeyToken="1fc8b3b9a1e18e3b">
$ D* m* \/ J% n& D# ?* ?( o
</assemblyIdentity>
- T0 V6 G5 C% k/ L- k
</dependentAssembly>
* F) B9 f, {3 d9 ^5 J/ n
</dependency>
: X* k! m+ E/ X: s, N- Y7 l
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
% b7 |. H. j1 z6 B- {, {3 P
7 R, Q; u+ R9 m% w X
+ ]' \" @5 `8 n2 C: X- D; h7 {
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
1 x& o5 k3 \$ k% w$ K3 o6 J2 j1 g
感谢此博文博主
http://www.zeali.net/entry/476
9 }/ m K/ j: k4 Y( E$ K; G: @
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2