要是不用全局变量呢, 直接:Object* Init(){ return new Object; }最好还提供一个释放的函数: void Free(Object* pObj){ delete pObj; }

解决方案 »

  1.   

    那维护一个g_pObjList的列表呢?
      

  2.   

    DLL一般都不会有问题如果你是纯的DLL那么用LoadLibaray,应该就不存在冲突问题了
      

  3.   

    我只是在找一种方法,使得每次动态加载DLL就像通过new产生一个实例一样。
      

  4.   

    Init 改名叫CreateNewObject() ,嘿嘿~~~~
      

  5.   

    我遇到过同样的问题,同一个dll不需要加载多次,加载多次也没意义,因为系统只有第一次会真正加载,dll 中的全局数据数据无法正常使用. long CreateInterface()
    {
    Obj* m_s=new Obj();
    return (long)m_s;
    }long TerminateInterface(long handle)
    {
    Obj* m_s=((Obj*)handle);
    delete m_s;
    return 0;
    }long Dosomething(long handle)
    {
    return ((Obj*)handle)->dosomething();
    }这样的方式使用即可避免全局量的冲突
      

  6.   

    看看COM组件中的引用计数,比较好的方法
      

  7.   

    你可以在DLL中做一个 NewObj 函数,
    只Load一次, 多次 NewObj
      

  8.   

    简单啊
    有个函数可能大家不大用,所以不熟悉
    TlsAlloc,可用于在dll中为每个Thread分配不同的存储区
    也就是说,TlsAlloc一个相同的编号,对于不同Thread来说,其内容是不一样的
    lz可以把g_pObject要保存的对象比如编为常量 #define GLOBALOBJECT 1
    每个Thread用TlsGetValue(GLOBALOBJECT)就可以得到不同的object啦具体MSDN
    Using Thread Local Storage in a Dynamic-Link Library
      

  9.   

    最简单的办法就是:把你要加载的dll,先改名复制,再加载。即:把他看成不同的dll。
      

  10.   

    每次要不同的地址除了new还有什么办法?
    如果这是考虑g_object已经被赋值,那增加一个类似reset的方法就行了
      

  11.   

    把这个g_pObject   =   new   Object(); 放到dll外面就可以了,如果dll里面用,通过参数传进来就可以了