0

我有一个混合模式程序集,使用该/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 之间的签名中使用这种混合类型来导出类型吗?

4

1 回答 1

2

这个问题和答案可能会有所帮助: 编译器错误 C2158 的最佳解决方法:make_public 不支持本机模板类型

于 2011-03-21T13:30:17.297 回答