【发布时间】:2014-04-07 09:22:45
【问题描述】:
我有以下设置:
- CSharp.dll,一个 C# dll
- CppCli.dll,一个混合模式 C++/Cli dll。
- Native.dll,本机 C++ dll。
原生项目声明
class Native
{
public:
virtual void Add(int a);
};
在混合模式项目中实现:
class Mixed : public Native
{
public:
virtual void Add(int a);
ICSharpInterface^ MakeManaged();
};
由于基类是在 Native 中定义的,我可以将我的实现传递给 Native 中的其他代码。但现在我想测试这个类。
如果我使用#pragma make_public(Mixed);,它只会公开一个结构,而没有任何外部可见的功能。
如果我尝试从另一个混合模式 dll 链接到混合模式 dll,我会收到链接器错误,因为它是本机类,并且混合模式 dll 不会生成要链接的 .lib。
如果我尝试 __declspec(dllexport) 类,Visual Studio 会抱怨,因为接口暴露了托管的东西。
所以我的问题是:
如何在我的测试中实例化(链接到)这个类?我会对任何显示如何创建实例的解决方案感到满意,我可以在其中调用其公共接口,无论是来自 C++、C++/Cli 还是来自 C#。
【问题讨论】:
标签: c++ .net interop c++-cli mixed-mode