这个activeX dll不能加载图片,高手来看看
我用vb6做了一个dll,目的是把一个文件的内容(已打包图片、文字等)转换成gif图片,在网页上显示出来。在网上搜到的bytes转picture程序,如下:
Private Function PictureFromByteStream(B() As Byte) As IPicture
Dim LowerBound As Long
Dim ByteCount As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture(15)
Dim istm As stdole.IUnknown
On Error GoTo Err_Init
If UBound(B) < 0 Then Exit Function
LowerBound = LBound(B)
ByteCount = (UBound(B) - LowerBound) + 1
hMem = GlobalAlloc(&H2, ByteCount)
If hMem <> 0 Then
lpMem = GlobalLock(hMem)
If lpMem <> 0 Then
CopyMemory ByVal lpMem, B(LowerBound), ByteCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, istm) = 0 Then
If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(istm), ByteCount, 0, IID_IPicture(0), PictureFromByteStream)
End If
End If
End If
End If
Exit Function
Err_Init:
Set PictureFromByteStream = Nothing
End Function
上面的API函数调用了ole32和olepro 。
然后使用paintpicture 贴到picturebox里(autoredraw=true)。
本机调试都能正常运行,但是放到服务器上,文字、画线都正常,就是这个贴上去的图像不显示(空白),也没有任何错误提示,日志里也没看到,服务器系统是win2008企业版,IIS7 。
使用另外单独编写的程序在服务器上调用此dll,图片也是正常的。
还有,不用上面的程序,直接二进制字节存盘、再加载成图片,现象也完全一样。
高手给分析一下,这个问题我感觉是IIS7对上面的哪个部分有限制,。
几天了,不得其解。 IIS7 bytes转图片 activeX dll --------------------编程问答-------------------- 查到这样一段文字:
VB ActiveX DLL中的PaintPicture在单线程模式下与多线程模式下的表现差异
同样是VB ActiveX DLL中的PaintPicture,在单线程模式下,会绘制在对象的Image的hDC上,而在多线程模式下,则绘制在对象的实际hDC上,这样就会造成直接调用windows GDI函数的绘制结果与PaintPicture的绘制结果无法叠加。
Form和PicturBox、UserControl对象,具有hDC属性,而这个属性是与AutoRedraw属性相关的。但PaintPicture所选择的hDC,则与AutoRedraw属性无关。
难道是paintpicture的问题? --------------------编程问答-------------------- 帮顶,也可以考虑一下GDI+,有图片类型转换…… --------------------编程问答-------------------- 现在比较明显了,问题出在Paintpicture上,在组件里,它都画不出图,而用“set picture=图片”却可以,还得想点其他办法。 --------------------编程问答-------------------- 此题未解,只能在客户端做转换了
补充:VB , COM/DCOM/COM+