DLL中的程序出现Cannot assign a TFont to a TFont应该怎么解决?
DLL中已经包含'ShareMem'单元,不想Build with runtime Package
有什么办法可以解决吗?

解决方案 »

  1.   

    你一定是对TFont直接进行了赋值操作,如果你一定要传递这些信息给DLL中的TFont,那么请自己写一个深度赋值操作函数来进行赋值操作,而不要直接赋值
      

  2.   

    没有对TFont进行赋值操作,如果移动某个控件(TB97的工具条上的按钮)或者在TcxImage控件上按鼠标的右键就会出现这种错误。
    深度赋值操作是什么意思?应该怎么写呀?
      

  3.   

    如果你想在dll中操作主窗體的東西, 建議還是用package
      

  4.   

    用Package的放,发布应用程序的时候要带一大堆东东,不想用Package。
    并且这个错误也不是由操作主窗体的东西引起的。
    还有什么其它的方法没有呀?
      

  5.   

    必须使用Borlndmm.dll或者package中的一种,否则不咬在主程序和dll中传递任何class类型。
      

  6.   

    在这个DLL或组件初始化的时候,把里边所有的组件的ParentFont 设置为 False即可
      

  7.   

    所有有ParentFont的组件都已经设为False了,但有些控件没有ParentFont,就是这个控件引起的错误,还有其它的办法没有?
      

  8.   

    主要是由于在创建Dll的Form时,将外部调用程序的Application、Screen和MainForm都传给了Dll并且将Dll中的这几个对象都替换掉了的缘故,解决的办法是只需将外部调用程序的Application.Handle及MainForm传给Dll并替换掉Dll中的这两项值就可以了,我已测试通过,可以试一试。如:
    var  
    p: PLongInt;{DllApp: TApplication Dll中的Application
     OutApp: TApplication 外部调用程序的Application
    }
    p:=@(DllApp.MainForm);
    DllApp.Handle := OutApp.Handle;
    p^:=LongInt(OutApp.MainForm);
      

  9.   

    如果使用了vcl,dll.dpr 的第一个引用单元添加ShareMem,使用dll的工程也在第一个添加,dll, 工程,都用动态连接bpl