简单地说,要注意两点:
6 j2 R0 V& e5 C5 Q. N
( U* m; E% p6 A$ d1、被调用的dll是release版本还是debug版本很重要.是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,8 K; k: H, s7 y" I- f6 s. f
但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。
2 `0 H& E \6 @$ p# y所以,在省城dll的时候不要使用debug版本,而要使用release版本。$ e. p! U1 @8 F/ k) s: i
如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):- <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
6 R$ L4 z5 f3 e& M - manifestVersion="1.0">
& t: c% n% s& M. i - <dependency>
% k2 N K% Q. Y ` - <dependentAssembly>
3 `; D- M7 L6 ~$ L - <assemblyIdentity type="win32" $ U3 z) m, Z, u7 V1 j) B
- name="Microsoft.VC80.DebugCRT"
& [ G. g; H$ I% o# E! [ - version="8.0.50608.0" 8 c: _5 B7 ~$ ?7 {
- processorArchitecture="x86" $ y# P' L# x3 G/ a/ e( F, K
- publicKeyToken="1fc8b3b9a1e18e3b">
8 Z% c% W7 c# E, N |( R - </assemblyIdentity> , h+ g4 x; s8 Y; G" |' C& h
- </dependentAssembly> & w8 o) l7 @: l
- </dependency> ' W2 L8 a* u4 d% p6 O4 G6 `
- </assembly>
复制代码 如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
- q, T0 ?6 z7 S2 u9 f- t' N( c! `+ w3 A" @6 q+ g3 L" y! O
+ K( ^/ c% M! ~' f: Z( O, j
2、机器的位数。dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择 |