在混合模式程序集中签名中具有非托管类型的导出方法

时间:2011-03-21 12:35:00

标签: .net c++-cli mixed-mode

我有一个混合模式程序集,使用/clr选项构建。我正在尝试从中导出一个类,供另一个使用/clr选项构建的混合模式程序集使用。

我的问题是该方法的签名包含托管和非托管类型的混合。例如:

static System::String ^Convert( const CString from );

最初,我尝试在实现此功能的非ref类上使用__declspec(dllexport)。这失败,错误 C3395:__ decclspec(dllexport)无法应用于具有__clrcall调用约定的函数,可能是因为签名中的托管类型。我的下一步是将课程改为ref课程。现在,程序集构建和Reflector显示导出的方法,如下所示:

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:'转换':不是'XXX :: AtlCStringConverter'的成员。我已经检查过明显的错误,例如混合使用可能导致签名不匹配的不同字符类型。

我意识到这些导出尝试都不是真正的犹太人,因为托管/非托管类型的混合在签名中并排显示,但由于托管/非托管的混合在中是很好的一个混合模式程序集,我想知道在混合模式DLL之间的签名中是否无法使用这种混合类型导出类型?

1 个答案:

答案 0 :(得分:2)