繁体   English   中英

如何在Visual Studio 2008中创建.dll以在C#应用程序中使用?

[英]How to create a .dll in Visual Studio 2008 for use in a C# App?

我有一个C ++类,我想从C#应用程序访问。 我需要访问构造函数和单个成员函数。 目前该应用程序接受stl::vector s形式的数据,但如果不太可行,我可以进行一些转换吗?

我在网上发现了一些文章,描述了如何调用C ++ DLL以及其他描述如何为其他目的制作.dll项目的文章。 我很难找到在Visual Studio 2008中创建它们以供在C#应用程序中使用的指南(VS 6.0似乎有一些,但它们指定的大多数选项似乎没有出现在2008版本中)。

如果有人有一个分步指南或一个相当基本的例子来开始,我会非常感激。

如果这样的DLL是不受管理的。 你将不得不使用P / invoke。 p / invoke函数定义如下所示:

[DllImport("Library_Name.dll", EntryPoint = "function")]
public static extern void function();

另一方面,如果是托管(C ++ / CLI)DLL(或程序集)。 您可以通过在.NET项目中添加对它的引用来访问它。

编辑:我想我根本没回答你的问题。 但是要创建要从.NET访问的托管C ++ DLL,请创建一个新项目:Visual C ++ / CLR / Class Library。 然后,只需将其输出DLL添加到您的C#项目中。

那就是它。 :)

在C ++和C#之间进行互操作的最简单方法是使用托管C ++或C ++ / CLI。 在VisualStudio中,创建一个“CLR类库”类型的新C ++项目。 您希望C#可以使用的部分有一些新的语法,但您可以像往常一样使用常规C ++。

在这个例子中,我使用std::vector<int>只是为了表明你可以使用标准类型 - 但是,在实际的应用程序中,我更喜欢尽可能使用.NET类型(在这种情况下是一个System::Collections::Generic::List<int> )。

#pragma unmanaged
#include <vector>
#pragma managed

public ref class CppClass
{
public:
   CppClass() : vectorOfInts_(new std::vector<int>)
   {}

   // This is a finalizer, run when GC collects the managed object
   !CppClass()
   { delete vectorOfInts_; }

   void Add(int n)
   { vectorOfInts_->push_back(n); }

private:
    std::vector<int>* vectorOfInts_;
};

编辑:更改类以按指针而不是按值保存向量。

你有一个你想重新构建为dll的现有C ++ exe吗? 或者你是否拥有C ++类?
如果您拥有的只是C ++类,那么您可能会考虑构建一个.Net dll。 虽然你无法将stl类型从C#传递给C ++,但我确信你可以传递托管的.Net类型。
如果必须在类中使用stl类型,则可以转换C ++类或调用应用程序中的数据。

我找到了一个有效的教程 但请注意,您必须小心将.dll复制到与可执行文件相同的目录中。 我试图告诉可执行文件DLL在哪里但最终放弃了,我搞砸了。

在C#中使用非托管C ++ Dll非常繁琐。

“更简单”的路径是将其放在COM包装器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM