在dll中定义一个类T,怎么把+-/等运算符利用友元函数重载

在dll中定义一个类T,如何把+-*/等运算符利用友元函数重载?
在DLL中定义一个类T,在T中需要重载+-*/等运算符,进行计算,如果定义为内部函数,在进行如T+10类似的计算时,可以,但计算10+T却报错,如果把+-*/定义为友元函数,即可以。但是我在dll中却报错,无法定义。def文件中这样定义的:operator + @1。请问在dll中如何定义+-*/等运算符呢?

------解决方案--------------------
DllForClass.h
/ 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLFORCLASS_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// DLLFORCLASS_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DLLFORCLASS_EXPORTS
#define DLLFORCLASS_API __declspec(dllexport)
#else
#define DLLFORCLASS_API __declspec(dllimport)
#endif

// 此类是从 DllForClass.dll 导出的
class DLLFORCLASS_API CDllForClass {
double re,im;

public:
CDllForClass(void);
CDllForClass(double r);
CDllForClass(double r,double i);
CDllForClass(const CDllForClass& a);

double image();
double real();

CDllForClass operator =(double a);
CDllForClass operator =(const CDllForClass& a);
CDllForClass operator +=(double a);
CDllForClass operator +=(const CDllForClass& a);

friend DLLFORCLASS_API CDllForClass operator +(const CDllForClass& a,const CDllForClass& b);
friend DLLFORCLASS_API CDllForClass operator +(const CDllForClass& a,double b);
friend DLLFORCLASS_API CDllForClass operator +(double a,const CDllForClass& b);
};

extern DLLFORCLASS_API int nDllForClass;

DLLFORCLASS_API int fnDllForClass(void);
DllForClass.cpp
// DllForClass.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "DllForClass.h"


// 这是导出变量的一个示例
DLLFORCLASS_API int nDllForClass=0;

// 这是导出函数的一个示例。
DLLFORCLASS_API int fnDllForClass(void)
{
return 42;
}

// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 DllForClass.h
CDllForClass::CDllForClass():re(0),im(0){}
CDllForClass::CDllForClass(double r):re(r),im(0){}
CDllForClass::CDllForClass(double r,double i):re(r),im(i){}
CDllForClass::CDllForClass(const CDllForClass& a):re(a.re),im(a.im){}

DLLFORCLASS_API CDllForClass operator +(const CDllForClass& a,const CDllForClass& b){
      return CDllForClass(a) += (b);  
};
DLLFORCLASS_API CDllForClass operator +(const CDllForClass& a,double b){
      return CDllForClass(a) += b;  
};
DLLFORCLASS_API CDllForClass operator +(double a,const CDllForClass& b){
      return CDllForClass(b) += a;  
};

double CDllForClass::image(){return im;}
double CDllForClass::real(){return re;}

CDllForClass CDllForClass::operator =(double a){ re = a;im=0; return *this; }
CDllForClass CDllForClass::operator =(const CDllForClass& a){ re = a.re;im=a.im; return *this; }
CDllForClass CDllForClass::operator +=(double a){ re += a; return *this; };
CDllForClass CDllForClass::operator +=(const CDllForClass& a){ re += a.re;im += a.im; return *this; }
TestDllForClass.cpp
// TestDllForClass.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include"DllForClass.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{   CDllForClass c,c1(4,5),c2(3,4.0);
    c =c1+c2;
cout<<c.real();
if(c.image()>=0)cout<< "+" ;else cout<<"-" ;
cout<< "i" <<abs(c.image())<<endl;
cin.get();
return 0;
}

结果:
7+i9