晨鸟科技
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
[打印本页]
作者:
Star
时间:
2011-3-24 20:32
标题:
HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
, V8 Y: H1 U* ~4 q j+ w% u3 {
H5 J) Y) c+ ^
1、被调用的dll是release版本还是debug版本很重要.
是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,
但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
+ {2 ^) M8 X( q* Z; R
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
6 l$ D6 G1 A2 _ X3 F! c% e; ~0 K
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
5 R" o3 p* x- V3 Q" w
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
, K; H6 [. e% W7 ]% M; T
manifestVersion="1.0">
/ `2 m: _/ f( Y: _+ _# q) r
<dependency>
7 [4 K* f3 Q2 Q. m
<dependentAssembly>
+ P- D* W9 V5 Z3 _& I2 j
<assemblyIdentity type="win32"
: m% X$ X; k) V
name="Microsoft.VC80.DebugCRT"
0 ?, K: Q* g* U: l$ s. R1 Y7 m
version="8.0.50608.0"
; C6 U m) p' |% a
processorArchitecture="x86"
5 h" s+ R! t- [' N3 J! R- b7 L
publicKeyToken="1fc8b3b9a1e18e3b">
* ]$ S) U% \$ l' }9 x
</assemblyIdentity>
% n9 A2 C3 S- t. C
</dependentAssembly>
2 c. K. G6 i* R+ Q
</dependency>
) M- _3 a" w9 u& G
</assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
, W4 L0 C! @; @' v
* q/ L9 n. Z; v2 _
4 Q T/ x( v+ t% B7 C6 Y
2、机器的位数。
dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者:
Star
时间:
2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。
4 V7 L0 E7 R8 }& i! V$ Y
感谢此博文博主
http://www.zeali.net/entry/476
1 B& i: I8 r6 m3 ?/ U; v2 ?
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2