晨鸟科技

标题: HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL [打印本页]

作者: Star    时间: 2011-3-24 20:32
标题: HRESULT: 0x800736B1 C#调用VC++.net托管库程序集DLL
简单地说,要注意两点:
* {; r4 n' g/ _" Z+ J& w
+ r# u" e& U: K& k5 s% R1、被调用的dll是release版本还是debug版本很重要.是release版本,如果出现上述问题,就需要安装Microsoft Visual C++ 2005 Redistributable Package (x86),以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等,但是,在我的项目中没有这种情况,因为已经安装了.net FrameWork,
1 H* S+ s- F+ @! J  ]但是如果debug版本,这就囧了,即使用任何一种方法去安装CRT都会有HRESULT: 0x800736B1 的错误。, _7 |" F- u# Q  z% W7 d
所以,在省城dll的时候不要使用debug版本,而要使用release版本。
: ~& i) a3 y0 |3 V5 [+ s% c如何查看手头的dll是哪个版本,最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):
  1. <assembly xmlns="urn:schemas-microsoft-com:asm.v1"   % d. o8 c0 z. |, E  z
  2.           manifestVersion="1.0">  
    7 z  A; E; T0 P$ j+ ~% v
  3.   <dependency>  . J4 N+ f; t# A0 n8 C6 |. U- O! W0 d
  4.     <dependentAssembly>  
    ' s1 [, Q, o- e' \& P
  5.       <assemblyIdentity type="win32"   
    8 P; N4 N8 n. G- y/ d) \4 Y0 {6 Y3 |( t
  6.                         name="Microsoft.VC80.DebugCRT"   % U) _' M  {3 y  u# K  C
  7.                         version="8.0.50608.0"   6 Q- Y, Y! |/ M
  8.                         processorArchitecture="x86"   : J. [- ]  P5 m7 V
  9.                         publicKeyToken="1fc8b3b9a1e18e3b">  ( m( M8 \) \$ V
  10.       </assemblyIdentity>  
    * W. S& d& m: R% D
  11.     </dependentAssembly>  
    ) ~! C* r5 n+ ^4 E) A1 }
  12.   </dependency>  
    / N' Z; i" r' W% e
  13. </assembly>
复制代码
如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是 Microsoft.VC80.CRT 则 link 到再分发版本。
& ^% ~1 Z2 f5 r6 L% o8 \" a+ P5 m) y8 o/ `. i
$ R! m7 r( j/ Q
2、机器的位数。dll要被调用使用在32位机器上,生成dll的时候要选择Win32;如果是要使用在64位机器上,则要选择x64【在配置管理器】中选择
作者: Star    时间: 2011-3-24 20:35
这个太重要了,做项目发布一定要注意,不然,经常性的问题就是项目运行在你开发用的机器上啥事没有,运行在客户机器上就各种问题了。4 S! o8 T) r/ t1 a4 F% W
感谢此博文博主http://www.zeali.net/entry/476
& d4 x2 t) A) Z" W1 S7 N* w




欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/) Powered by Discuz! X3.2