通过P/Invoke将MFC CArray编组到C# 我试图编写一个C++类(2010),它允许使用遗留C++DLL中包含的函数。这些函数使用u stdcall导出,并具有不同的参数集。我处理字符串和其他灵长类没有问题,并且能够毫无问题地调用这些函数

通过P/Invoke将MFC CArray编组到C# 我试图编写一个C++类(2010),它允许使用遗留C++DLL中包含的函数。这些函数使用u stdcall导出,并具有不同的参数集。我处理字符串和其他灵长类没有问题,并且能够毫无问题地调用这些函数,c#,.net,mfc,pinvoke,marshalling,C#,.net,Mfc,Pinvoke,Marshalling,问题是一些函数包含CArray&reference作为参数。我不知道如何封送这个数据类型,或者它是否可能 我不能更改遗留DLL代码,遗憾的是, < P>为了正确处理这个问题,可以使用一个包装MLC/C++运行时版本来做一个包装DLL,并确保它以一个传统的C++本地数组的指针接受相同的数组。 可以从C#调用此包装器DLL 您可以尝试使用更新的MFC版本(并使用C++/CLI进行编组)但是,新的 CARLY 可能与传统库所期望的二进制不兼容。你能给我演示一个代码示例,或者可以给我指出一个解释如何构造

问题是一些函数包含CArray&reference作为参数。我不知道如何封送这个数据类型,或者它是否可能


<>我不能更改遗留DLL代码,遗憾的是,

< P>为了正确处理这个问题,可以使用一个包装MLC/C++运行时版本来做一个包装DLL,并确保它以一个传统的C++本地数组的指针接受相同的数组。 可以从C#调用此包装器DLL


您可以尝试使用更新的MFC版本(并使用C++/CLI进行编组)但是,新的<代码> CARLY 可能与传统库所期望的二进制不兼容。

你能给我演示一个代码示例,或者可以给我指出一个解释如何构造包装类的资源吗?我以前从未冒险进入这个领域。谢谢!什么MFC版本用于开发传统的C++ DLL?per需要是同一版本。它是MFC90。我已经到处搜索了代码示例,我能找到的只是一些类包装器,其中本机代码项目作为解决方案的一部分包含在其中。这里不是这样。这里,我有一个静态DLL,导出函数(不是类)我得到了做什么的要点——基本上用C++调用函数并用托管的数据类型导出结果。问题是我无法确定如何将项目设置为启动。哦,我可以访问头文件和.LIB。它不是COM DLL。哦,那应该很容易。只需一步一步。我假设MFC有DL。链接。首先在vs 2008中创建一个新的dll,并在项目设置中启用mfc和.net。这些是标准向导选项。接下来将其链接到旧dll。只需添加一个函数(非托管c++)这会产生一个空的CARRE,并调用您的本机代码。如果您得到这个链接,您就可以添加一个托管C++类,其中一个静态FN没有参数。请在从.NET调用时检查您实际到达的调试器。不要担心混合3.5/4,这是以后的问题。请在这里报告更多的指令。