我想在dll中用RegisterClass()注册一个类,然后再宿主程序中GetClass()得到该类,但发觉总是返回空。但如果RegisterClass和GetClass都在一个工程中就能没问题,不知哪位有这方面的经验可以分享一下

解决方案 »

  1.   

    ==楼主,下面的话可能对你有帮助:
      DLl,包括它的代码和数据都是独立的,绝对不会跟其他的动态库串在一起。但是,如果你把所有功能放到 一个EXE的工程里面,它的数据和代码就都是放到一起的,最后产生可执行程序的时候,就会互相干扰。而动态库就不会,这是由操作系统来保证的。
      

  2.   

    按照你的做法:
      dll中RegGroups中含有你的相关类的注册信息
      exe中的RegGroups中含有你的相关类的注册信息
      exe的GetClass要去exe中的全局变量RegGroups找相关类的信息,你想,能找到吗?
      

  3.   

    然后把你宿主程序的application传递进dll。
      

  4.   

    function FindClass(const ClassName: string): TPersistentClass;
    begin
      Result := GetClass(ClassName);
      if Result = nil then ClassNotFound(ClassName);
    end;
    //FindClass调用的还是GetClass
    只不过后面加了一个异常处理罢了
      

  5.   

    这个最好用BPL,用DLL基本是没有办法的。