C# 如何从C访问非托管数据#

C# 如何从C访问非托管数据#,c#,.net,dll,unmanaged,C#,.net,Dll,Unmanaged,我有一个非托管(C/C++)DLL,我需要从C#应用程序调用它 DLL调用需要返回数据(从DLL创建的C++类)返回到C语言应用程序。 我控制DLL的导出函数,所以如果需要的话,我可以在C++类上创建一个包装器。我知道如何使用p/Invoke访问DLL,所以我只是想了解一些关于如何返回数据的指导 从DLL接收的数据是一系列键值对,因此我考虑返回一个JSON字符串,并使用JSON.NET将其反序列化到一个对象 从C#/.NET应用程序从非托管源访问此类数据的首选方法是什么?没有真正的理由仅仅为了

我有一个非托管(C/C++)DLL,我需要从C#应用程序调用它

DLL调用需要返回数据(从DLL创建的C++类)返回到C语言应用程序。

我控制DLL的导出函数,所以如果需要的话,我可以在C++类上创建一个包装器。我知道如何使用p/Invoke访问DLL,所以我只是想了解一些关于如何返回数据的指导

从DLL接收的数据是一系列键值对,因此我考虑返回一个JSON字符串,并使用JSON.NET将其反序列化到一个对象


从C#/.NET应用程序从非托管源访问此类数据的首选方法是什么?

没有真正的理由仅仅为了在托管和非托管应用程序之间传输代码而添加额外的序列化层。但是,如果您的代码更简单,并且您不担心性能,那么任何将数据从一层移动到另一层的方法都是完美的

如果你想尝试PInvoke方法,这里有一些来自MSDN的资源


如果你能够修改C++ DLL,那么C++ +CLI可以是最干净的。你可以直接在C++中编写一套.NET包装器类,避免了需要编写单独的p/jukes声明。

如果你包含了你从C++导出的方法签名,我确信有人会帮助你编写所需的pJoKi。为什么不使用null/制表符/冒号/任何分隔字符串的字符?更好的是,为什么不添加一个C++/CLI模块并直接转换所有内容,而不是通过P/Invoke?