现有一张图片,主程序和DLL窗体中都要用到,图片用bitmap读取,现在传一个bmp.canvas.handle给dll,dll中声明
  cvs: TCanvas;  cvs := TCanvas.create;
  cvs := 传来的 HDC
但是在dll中用copyrect来测试,画不出图来,如果用这个方法在主窗体确实可以画出来的,求助!!!!!!!

解决方案 »

  1.   


    现在我传了一个HBitmap至dll,目前问题就是如何通过HBitmap将图片画到form上,Canvas.Draw参数只能是HDC使用StretchDIBits需要占用一定内存,不喜欢使用CreateCompatibleDC,那么我主程序的HDC就没有了,必须DeleteDC(dll的HDC)后,主程序才能再画出图来求解………………………………
      

  2.   


    说白了,就是一个app,一个dll,app中有一个bitmap,如何是2个都使用同一个图片,并且,可以同时使用,上面的方法,其中HDC那个就不能同时使用,很奇怪
      

  3.   


    表达不出来了,代码太多,我自己看的都累,就是实现主程序和dll共享一个bitmap,目的就是节省内存不要全局变量的方式,感觉不感觉,不直接传送bitmap类为参数,只用windows标准的,如Hbitmap等等这样说可能容易理解
      

  4.   


    晕啊,这个问题这么难???一张不需要改动的图片,主程序和dll难道不能共用????算了,俺DLL大不了再读一遍,占内存就占内存吧,烦不了了………………
      

  5.   

    把BMP使用内存的地址及大小传给DLL,这样你就可以随意地使用了。
    不过并不能减少内存的使用
      

  6.   


    首先,谢谢楼上的回答,不过很可惜,这个方法很早就试过了有一个很关键的问题,DLL中如何使用???用一个TBitmap???ok,完全可以,但是dll不用时,这个tbitmap释放不,你试一下就会发现,一旦释放,内存会跟着释放,即使你把bitmap的handle换个指向,只要你free了,图片就没了
      

  7.   

    要不你仅用windows api来完成,不用delphi的封装
      

  8.   


    谢谢楼上的回答 API试过几种,目前试过的不是要HDC就是要HBITMAP,这两个都试过HDC有一个大问题,当在dll中声明一个hdc指向图片,用是可以用,但是主程序的hdc就失效了,除非我释放掉dll中hdc才行,就是不能共用,万一同时绘图……HBITMAP,用这个还是需要先申请一块内存,然后才能画,显然与我的初衷相违背……
    没有分了,这个帖子再问一个问题,win7下有字体渲染,不得不说,很丑!!!!在canvas.textout的时候能否关闭这个渲染,像xp那样的输出效果就好
      

  9.   

    如果 App 是 Delphi 的有一个类叫: TCanvas   DLL是VC++的,也写了一个类叫: TCanvas , 互传的话,你觉得有问题吗?如果都是delphi的话,你尝试带上 Rtl.bpl 编译试下
      

  10.   


    俺传的是HDC,没有直接传delphi的对象,就是为了避免带一些delphi的dll