如何从c++;到c#?

如何从c++;到c#?,c#,c++,windows,C#,C++,Windows,我已经研究了一段时间,但没有找到解决办法 我正在编写一个使用c++/CLI包装器的程序。我现在的目标是将所有正在运行的进程及其PID(以及其他信息)的列表返回给c#。我有一个运行C++函数,它返回一个类型的PysCytRy32,但没有一点线索如何将信息获取到C。 我知道C语言中有一个函数来获取所有运行的进程,但是我尝试用C++来做。 任何正确方向的提示或指针都会很好。例如,将vector更改为新列表,当vector的大小或值更改时,通知c代码通知更新列表项(可能您可以使用事件通知),这是否可以解

我已经研究了一段时间,但没有找到解决办法

我正在编写一个使用c++/CLI包装器的程序。我现在的目标是将所有正在运行的进程及其PID(以及其他信息)的列表返回给c#。我有一个运行C++函数,它返回一个类型的PysCytRy32,但没有一点线索如何将信息获取到C。 我知道C语言中有一个函数来获取所有运行的进程,但是我尝试用C++来做。
任何正确方向的提示或指针都会很好。

例如,将vector更改为新列表,当vector的大小或值更改时,通知c代码通知更新列表项(可能您可以使用事件通知),这是否可以解决您的问题?

首先,为您的c#应用程序设置api以从中访问数据。在C++函数返回类型之前,用<代码>为此使用#define可能很方便

在C#land中,确保您有using
System.Runtime.InteropServices然后,使用
[DllImport(“dll_name.dll,CharSet=CharSet.Unicode)]
方法属性为您的api创建一个静态方法句柄,然后
静态外部返回类型CallCPPFunction()您必须使用该方法编写自定义数据分析器,因为返回的数据只是一堆字节(意思是C++将尝试将接收到的数据从C++中返回为C中指定的返回类型)。您可以在C#中创建一个用字节数组构造的结构,并将其设置为构造函数参数,但是,通过将一个或多个
int*
作为参数发送到C#函数,该函数保存有用的数据,如
sizeof(object)
或对象数据中的重要标记,使解析变得更容易,您的工作会变得更加轻松。请记住,这里的内存是由C和C++管理的,所以如果你通过<代码> int */COD>保存<代码> siZOF(对象)< /C> >,你仍然需要在C++中使用代码>删除< /C> >指针,但是确保当C或C++仍然使用数据时,你不做这样的事情。您可以在C++中执行一些代码< >不安全的<代码>代码,其中C++传递一个开始为false的布尔,然后当读取数据时,C标记为true。 我不是这项编组业务的专家,但我在过去成功地使用了这种以这种方式传输数据的确切方法。完全可以在C语言中使用C++类型的方法,这样数据解析就不是必要的,或者C不知何故使用.h文件来做一些事情,但是如果有的话,我不知道。这是我自己看的一个教程,我想弄清楚这个概念,但它有点长,我找不到另一个和我想找的一样的教程:


如果我没有错,如果在C语言中重新创建C++结构,那么数据解析甚至是不必要的,这样第一个数据成员定义为C结构中的关联数据成员,第二个C++成员到C中的第二个成员。或者一旦数据到达C++和C不匹配的数据成员,数据就会被偏移。如果您的结构包含子类型,您也需要在C#中重新创建这些子类型;一直到基元类型级别。

也许可以尝试一下SWIG()。我从来没有用过C++,但是它确实使java变得更容易。具体来说,SWIG的“导演”特性允许本地代码轻松调用C ^。你可以将C++代码编译成一个程序集,并将程序集引用到C代码中。注意,从C++中访问C++内存会导致内存泄漏。创建一个C++包,将vector转换成.NET类型。您没有显示任何代码,但是.NET和C++上的任何基础教程都会向您展示如何创建.NET类型。