我在C ++写了一个程序,它输出作为一个DLL。 我有一个C#WPF GUI和我想要导入的DLL做处理。
我是很新的C#。 如何使用C#中的C ++类? 我知道我不能只使用.h文件。
因为我在C ++中使用的指针,在C#中我不能使用指针。 这就是为什么我弄糊涂了。 像C ++我用char*
,而不是string
,我需要回到double*
为大集合double
数据,以及诸如此类的东西。
我在C ++写了一个程序,它输出作为一个DLL。 我有一个C#WPF GUI和我想要导入的DLL做处理。
我是很新的C#。 如何使用C#中的C ++类? 我知道我不能只使用.h文件。
因为我在C ++中使用的指针,在C#中我不能使用指针。 这就是为什么我弄糊涂了。 像C ++我用char*
,而不是string
,我需要回到double*
为大集合double
数据,以及诸如此类的东西。
有多种方式:
DllImportAttribute
到的P / Invoke到DLL。 为了解决您的其他问题,是的,你可以在C#中使用指针。 如果你有其中有一个功能double*
参数,你可以声明,在C#这样的:
[DllImport("Your.DLL")]
private static extern unsafe void DoProcessing(double* data, int dataSize);
你需要确保你检查C#项目的生成选项卡上的“允许不安全代码”复选框,并在这之后,你可以使用指针到你的心脏的内容。
但是,请注意,虽然我在这里提供的指针签名,因为你是一个指针明显舒服,还有其他的签名可能是更为安全供您使用,并且不会要求您编译C#与不安全的代码。 在CLR标准编组会照顾的转换从一个指针到C#阵列,提供你给它一个位的提示的,如果需要的长度:
[DllImport("Your.DLL")]
private static extern void DoProcessing(
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] double[] data,
int dataSize);
这指示使用在索引1处的参数(第2参数)作为双打的数组的大小指向由第一参数编组。 这可以让你避免在C#中的指针,并使用安全的CLI类型。 但是,如果你喜欢的指针,我的建议是只使用它们 - C#会为你更容易不必弄清楚如何不写他们的方法签名。
有关的P / Invoke的详细信息,请参阅本文档: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx
这在很大程度上取决于你的C ++ DLL的结构。 如果你只是一个功能屈指可数,而他们是一类没有成员函数,那么你可以让他们“外部C”的功能和使用的P / Invoke能力在.NET(有时也被称为的DllImport因为属性的使用)从C#访问的功能。