导出时是:__imp_?Utf82Unicode@@YA?AV?$basic_string@GU
导入时是:__imp_?Utf82Unicode@@YA?AV?$basic_string@_WU
G和_W的区别,为了研究各字母的含义。做了如下实验:
void fun()=>
?fun@@YAXXZ
void fun(int)=>
?fun@@YAXH@Z
void fun(int a,int b)=>
?fun@@YAXHH@Z
void fun(int a,int b,int c)
?fun@@YAXHHH@Z
void* fun()=>
?fun@@YAPAXXZ
void** fun()==>
?fun@@YAPAPAXXZ
void fun(short * )
?fun@@YAXPAF@Z
short* fun(short * )
?fun@@YAPAFPAF@Z
int fun(bool,char,short int,long,float,double )
?fun@@YAH_NDFJMN@Z
int fun(bool,char,short int,long,float )
?fun@@YAH_NDFJM@Z
int fun(bool,char,short int,long)=>
?fun@@YAH_NDFJ@Z
int fun(bool,char,short int )=>
?fun@@YAH_NDF@Z
int fun(bool,char)=>
?fun@@YAH_ND@Z
int fun(bool )=>
?fun@@YAH_N@Z
int fun(bool a)=>
?fun@@YAH_N@Z
int fun(CString)=>
?fun@@YAHV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
int fun(char)=>
?fun@@YAHD@Z
int fun(wchar_t)
?fun@@YAHG@Z
int fun(CArray<int,int>);
?fun@@YAHV?$CArray@HH@@@Z
int fun(CTime)
?fun@@YAHVCTime@ATL@@@Z
class CTestClass
{
};
_BMFGLOBE_EXPIMP int fun(class CTestClass);
?fun@@YAHVCTestClass@@@Z
int fun(unsigned char,unsigned int,unsigned long)
?fun@@YAHEIK@Z
int fun(__int64)
?fun@@YAH_J@Z
int fun(unsigned __int64 )
?fun@@YAH_K@Z
总结:
1,形参有没有名字,不影响导出。
2,int->H X->void void* ->PAX void**->PAPAX short->F short*->PAF
bool->N char->D long->J float->M double->N
CTime->VCTime@ATL CArray<int,int>->V?$CArray@HH
wchar_t非内置类型(unsigned short)->G wchar_t内置类型->_W unsigned char->E ,unsigned int->I,unsigned long->K
unsigned __int64->_K __int64->_J
注意:
dll导出的函数可以用VC自带的depend.exe查看。
lib导出的函数可以用命令查看:
dumpbin /LINKERMEMBER d:\Globe.lib > d:\1.txt
dumpbin是VC自动工具
开发环境:VS2002(VC7)
最后解决方法:
新加的dll 配置弄成和其他dll一样。
VS2005的规律见: