直接使用恐怕很麻烦,因为VC在导出C++函数的时候,进行了换名(Decorate),所以建议你不要直接导出VC类,而是导出几个操作对象的全局函数,并且如下声明:extern"C"{   // 这样可以防止函数被换名
__declspec(dllexport) int Func(...);    // 声明函数为导出函数
// ...
}在Delphi中,进行如下声明:
function Func(...): Integer; stdcall; external 'SomeDLL.dll';

解决方案 »

  1.   

    因为VC与DELPHI 的一些差异,
    还不如学得做做COM.
      

  2.   

     windoze的说法固然可以解决一些问题,但是我感觉那样做局限性太大,
    如果我想例示一个对象数组,就不行了.另外这样引用容易造成
    内存泄漏和其它弊端.如果做COM,其实最让人头疼的还是MFC和Delphi的数据类型冲突...
    不用MFC又舍不得...我这贴子再挂几天,再听听高人的见解. 
      

  3.   

    用COM思想可以实现。
    按如下方法.
    DLL中
    class A{
    public:
       void Fun1();
    }
    class B{
    public:
       virtual void _cdecl Fun1();
    privated:
       A* m_a;
    }
    void B:B()
    {
    m_a=new A;
    }
    void B::Fun1()
    {
      m_a->Fun1();
    }
    extern "C" __declspec(dllexport) B* GetBClass(){
       return new B;
    }在Delphi中
    type 
        B=class
        procedure Fun1 cdecl;virtual;abstract;
    end;function GetBClass:B cdecl;external 'my.dll';//使用
    var
      myB:B;
    begin
      myB:=GetBClass;
      myB.Fun1();
    end;
      

  4.   

    不对吧.好像Delphi的类必须有基类.而你的代码B=class没基类,这样编译会失败的.
      

  5.   

    longx的方法不行,别的不说,在myB.Fun1()这个地方就会出错,因为Delphi的换名规则和VC不同。
    要解决这个问题,看来使用COM是最佳手段。BTW:其实ATL挺不错的,如果不涉及到过多的界面因素,推荐使用。另外,新版的ATL中包含WTL(Window Template Library),一些不太复杂的界面工作也可以处理了,OutlookExpress就是用WTL写的。
      

  6.   

    各位老兄,别光说不练,你们试过没有?
    我可以肯定的说:上面的方法肯定行。我已试过成功了。Delphi 中类并不一定需要基类!!
      

  7.   

    那有新版的ATL啊?我想用ATL建一个有菜单的控件,却一直在发愁呢..:(