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代わりにクラスをクラスにすることでした。アセンブリがビルドされ、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: 'Convert' : is not a member of 'XXX::AtlCStringConverter' が生成されます。署名が一致しない原因となる可能性のある異なる char タイプの混合などの明らかな間違いをチェックしました。

これらのエクスポートの試みはどちらも、マネージド型とアンマネージド型の混合が署名で並んで公開されているという点で、実際にはコーシャではないことを認識していますが、このマネージド型とアンマネージド型の混合は混合モード アセンブリ内では問題ないため、混合モードの DLL 間のシグネチャでこのタイプの混合を使用してタイプをエクスポートする方法はありませんか?

4

1 に答える 1

2

この質問と回答が役立つ 場合があります:コンパイラ エラー C2158 の最適な回避策: make_public はネイティブ テンプレート タイプをサポートしていません

于 2011-03-21T13:30:17.297 に答える