【问题标题】:Compile error when calling managed C++ from C#从 C# 调用托管 C++ 时出现编译错误
【发布时间】:2011-07-19 05:28:51
【问题描述】:

我是 .net 的新手。 我有一个托管的 C++ 库。看起来像这样。

// header file
namespace cppnetdll
{
public __gc class Class1
{
public:
static int foo_int(void);
};
}

// source file
namespace cppnetdll
{
int Class1::foo_int(void)
{
return 123;
}
}

我可以从托管的 c++ 程序中调用它。当我尝试从 一个 C# 程序,我得到编译器错误:“类型或命名空间名称 找不到“Class1”(您是否缺少 using 指令或 程序集引用?)”错误是指下面的 DllImport 行。

这是 C# 代码 [代码:1:a72c1df571] 命名空间 cuser { 公共课xxx { [DllImport("cppnetdll.dll")] 外部 int Class1.foo_int();

private void yyy() { int i =
foo_int(); }
}
}[/code:1:a72c1df571]

我尝试了各种方法,但都没有成功。什么是魔法 语法?

有趣的是,我可以公平地从 C# 调用非托管 C++ 函数 通过将函数声明为“C”并从 DLL 导出来轻松实现。 我希望调用托管代码更容易。也许这很容易 没有人想过记录它!

【问题讨论】:

  • 您是 .NET 新手并使用“C++ 托管扩展”?在2011年?获取更新版本的 Visual C++(Visual Studio 2005 或更新版本即可)并开始使用 C++/CLI。使用 MC++ 代码只有一件事:在找到它的任何地方删除它。

标签: c# c++ visual-studio visual-studio-2010


【解决方案1】:

而不是使用 [DllImport ...]

尝试仅添加参考,这是 MSDN 中的操作方法: http://msdn.microsoft.com/en-us/library/7314433t%28v=VS.90%29.aspx

【讨论】:

    【解决方案2】:

    您不使用 [DllImport] 指令来调用以托管 C++ 编写的代码。这仅适用于导出其功能的本机 DLL。这两者都不适用于你的,它不是原生的,你也没有导出函数。

    您构建了一个托管程序集,您可以将其视为使用 C# 编写的程序集。项目 + 添加引用,浏览选项卡,导航到 DLL。或者更好的是,将两个项目放在一个解决方案中,使用“项目”选项卡选择参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      相关资源
      最近更新 更多