如何从c++;将DLL方法转换为C#代码? 你好,我想把我的程序用C语言写进C++ DLL文件中。我以前从未使用过这样的解决方案,我有一个问题。假设我有一个简单的代码片段,如下所示: //header file: ... extern "C" _declspec(dllexport) int fib(int num); ... //cpp file: ... extern "C" _declspec(dllexport) int fib(int num) { if (num == 1 || num == 0) return num; else return fib(num - 2) + fib(num - 1); } ... //and example C# code: ... [DllImport("fib.dll", EntryPoint="fib", CallingConvention = CallingConvention.Cdecl)] public static extern int CppFib(int a); static void Main(string[] args) { ... Console.WriteLine(CppFib(25)); ... }

如何从c++;将DLL方法转换为C#代码? 你好,我想把我的程序用C语言写进C++ DLL文件中。我以前从未使用过这样的解决方案,我有一个问题。假设我有一个简单的代码片段,如下所示: //header file: ... extern "C" _declspec(dllexport) int fib(int num); ... //cpp file: ... extern "C" _declspec(dllexport) int fib(int num) { if (num == 1 || num == 0) return num; else return fib(num - 2) + fib(num - 1); } ... //and example C# code: ... [DllImport("fib.dll", EntryPoint="fib", CallingConvention = CallingConvention.Cdecl)] public static extern int CppFib(int a); static void Main(string[] args) { ... Console.WriteLine(CppFib(25)); ... },c#,c++,dll,C#,C++,Dll,代码只需模拟一些需要在dll中执行的计算。一切都可以正常编译和工作,但如果我必须返回一些自定义数据,而不是像整数这样的简单值类型,该怎么办呢。例如: //cpp: ... struct Point { double x; double y; }; ... //csharp: ... IEnumerable<Point> points = GetPoints(); ... //cpp: ... 结构点 { 双x; 双y; }; ... //csharp:

代码只需模拟一些需要在dll中执行的计算。一切都可以正常编译和工作,但如果我必须返回一些自定义数据,而不是像整数这样的简单值类型,该怎么办呢。例如:

//cpp:
...

struct Point
{

    double x;
    double y;

};

...

//csharp:
...

IEnumerable<Point> points = GetPoints();

...
//cpp:
...
结构点
{
双x;
双y;
};
...
//csharp:
...
IEnumerable points=GetPoints();
...

这里是C++中定义的结构点。我需要实现一个返回点集合的方法。一个列表或一个表,没关系,我只是想有一个可能,通过它们迭代。我猜C#代码一定知道类型的样子,也许它需要某种声明??C++集合与C集合之间的转换如何?致以问候。

c++不知道什么是IEnumerable。sc++不知道IEnumerable是什么。所以使用Point[]points=GetPoints();但我相信这仍然失败,因为C++正在返回非托管内存。返回的是一个指针数组,它是4字节*数组长度,其中4字节是指向实际点结构的指针。double是8字节,所以Point是16字节。返回的数据位于执行堆栈上,从方法返回后,堆栈将被释放,因此您无法检索数据。返回的最佳方式是一个ItPtR作为参数:GETPOOT(ItPtR Data)。在调用之前必须分配数据,而C++中必须将数据连续地存储在内存中而不是**点。您可能需要*点[],其中数组在内存中是连续的。**点是一个指针数组,其中实际数据可以是内存中的任何位置,而不是连续内存位置中所必需的。