直接使用恐怕很麻烦,因为VC在导出C++函数的时候,进行了换名(Decorate),所以建议你不要直接导出VC类,而是导出几个操作对象的全局函数,并且如下声明:extern"C"{ // 这样可以防止函数被换名
__declspec(dllexport) int Func(...); // 声明函数为导出函数
// ...
}在Delphi中,进行如下声明:
function Func(...): Integer; stdcall; external 'SomeDLL.dll';
__declspec(dllexport) int Func(...); // 声明函数为导出函数
// ...
}在Delphi中,进行如下声明:
function Func(...): Integer; stdcall; external 'SomeDLL.dll';
还不如学得做做COM.
如果我想例示一个对象数组,就不行了.另外这样引用容易造成
内存泄漏和其它弊端.如果做COM,其实最让人头疼的还是MFC和Delphi的数据类型冲突...
不用MFC又舍不得...我这贴子再挂几天,再听听高人的见解.
按如下方法.
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;
要解决这个问题,看来使用COM是最佳手段。BTW:其实ATL挺不错的,如果不涉及到过多的界面因素,推荐使用。另外,新版的ATL中包含WTL(Window Template Library),一些不太复杂的界面工作也可以处理了,OutlookExpress就是用WTL写的。
我可以肯定的说:上面的方法肯定行。我已试过成功了。Delphi 中类并不一定需要基类!!