我已经写在标准C ++库。 我也有C#编写的一个.net Windows窗体应用程序,利用非托管库。
我明白我可以只使用PInvoke的,但我的C ++是完全面向对象的,我真的不想更动编组等。
有没有办法,我只能创建一个新的托管C ++ dll项目,复制和粘贴我的头文件和代码文件,并进行编译,并获得所有类的方法吗?
或者,我将不得不在创建托管C一些引用类++和它挂到我的非托管班? 我只是想这是尽可能简单。
谢谢!
我已经写在标准C ++库。 我也有C#编写的一个.net Windows窗体应用程序,利用非托管库。
我明白我可以只使用PInvoke的,但我的C ++是完全面向对象的,我真的不想更动编组等。
有没有办法,我只能创建一个新的托管C ++ dll项目,复制和粘贴我的头文件和代码文件,并进行编译,并获得所有类的方法吗?
或者,我将不得不在创建托管C一些引用类++和它挂到我的非托管班? 我只是想这是尽可能简单。
谢谢!
你仍然会写.NET特有的包装,即使在C ++ / CLI,他们只是看起来不同。 所以答案,你可以把它放在一个C ++ / CLI项目,并重新编译,并用它作为是,没有。 你仍然必须要么过(在这种情况下,你不妨使用的P / Invoke可能),或者你可以创建手柄,使用固定内存,让您的结构提供给托管代码封送数据。
我做这个是双向的:我写了一个GPU库在CUDA C和使用P / Invoke称之为从F#,我已经用C写的视频处理库++和书面薄C ++ / CLI包装,然后把它用在一个.NET应用程序。 我觉得CLI包装更痛苦的,但对于视频直播,我需要更短的延迟(少拷贝内存)。 对于GPU的项目,我更关心的是吞吐量。
你可能会想编写包装类在C ++ / CLI。 这是相当容易做到,只要你回来处理,而不是指针,枚举,而不是收藏等