我有一个混合模式程序集,使用该/clr
选项构建。我正在尝试从中导出一个类,以供另一个混合模式程序集使用,该程序集也使用该/clr
选项构建。
我的问题是该方法的签名包含托管和非托管类型的混合。例如:
static System::String ^Convert( const CString from );
最初,我尝试__declspec(dllexport)
在实现这个的非引用类上使用。这失败并出现错误C3395: __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention,大概是因为签名中的托管类型。我的下一个想法是将ref
课程改为课程。现在程序集构建并反射器显示导出的方法,如下所示:
public static unsafe string Convert(CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > modopt(IsConst) modreq(IsCopyConstructed)* from);
但是,在客户端程序集中,我无法引用导出的方法...
CString atlString("test");
AtlCStringConverter::Convert( atlString );
...产生错误C2039: 'Convert' : is not a member of 'XXX::AtlCStringConverter'。我已经检查了明显的错误,例如混合可能导致签名不匹配的不同字符类型。
我意识到这些导出尝试都不是真正的犹太教,因为托管/非托管类型的混合在签名中并排公开,但是由于托管/非托管的这种混合在混合模式程序集中很好,我想知道是否有没有办法在混合模式 DLL 之间的签名中使用这种混合类型来导出类型吗?