从C#调用托管C ++时编译错误

时间:2011-03-20 18:08:09

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

我是.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'(你是否错过了使用指令或者 汇编参考?)“错误是指下面的DllImport行。

这是C#代码     [代码:1:a72c1df571]     命名空间csuser     {     公共类xxx     {     [DllImport(“cppnetdll.dll”)] extern     int Class1.foo_int();

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

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

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

2 个答案:

答案 0 :(得分:3)

您不使用[DllImport]指令来调用用托管C ++编写的代码。这仅适用于导出其功能的本机DLL。这些都不适用于您的,它不是原生的,您不会导出该功能。

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

答案 1 :(得分:1)

而不是使用[DllImport ...]

尝试添加引用,这里是如何从MSDN: http://msdn.microsoft.com/en-us/library/7314433t%28v=VS.90%29.aspx