C# P/Invoke Interop Assistant-是否像导入dll';s标题? 我试图为一组非托管C++库创建包装器。我有库的代码,所以我下载了P/invoke互操作助手 我对C++项目中的导出有点困惑。它只是项目的标题吗

C# P/Invoke Interop Assistant-是否像导入dll';s标题? 我试图为一组非托管C++库创建包装器。我有库的代码,所以我下载了P/invoke互操作助手 我对C++项目中的导出有点困惑。它只是项目的标题吗,c#,c++,.net,interop,pinvoke,C#,C++,.net,Interop,Pinvoke,这是一个相当大的项目。我是否只是将每个库中的头文件加载到命令行工具中并生成C#签名 完成此操作后,是否需要手动将实际的dll导入添加到它们中,如下图所示,或者是否有方法将其定义为一个dll [DllImport(MyDLL.dll)] Pinvoke Interop助手在Windows头文件中使用所谓的SAL注释来获得更准确的Pinvoke声明。SAL帮助工具更好地分析代码,C和C++声明通常不足以确定指针是否指向单个值或值数组,并且不指定数据流,无论是函数所消耗的还是由函数返回的。编写[Dl

这是一个相当大的项目。我是否只是将每个库中的头文件加载到命令行工具中并生成C#签名

完成此操作后,是否需要手动将实际的dll导入添加到它们中,如下图所示,或者是否有方法将其定义为一个dll

[DllImport(MyDLL.dll)]

Pinvoke Interop助手在Windows头文件中使用所谓的SAL注释来获得更准确的Pinvoke声明。SAL帮助工具更好地分析代码,C和C++声明通常不足以确定指针是否指向单个值或值数组,并且不指定数据流,无论是函数所消耗的还是由函数返回的。编写[DllImport]属性时非常重要的事情。SAL补充说,缺少的信息

< >你的C++代码不太可能有这些SAL注释。查找C++声明中的标记,如“<代码> >代码> <代码> >代码>没有这个标记,Pinvoke互操作助手就无法做得更好

另一个挂起的是pJoNKE不支持真正的C++声明,它只适合于C声明。换句话说,您不能调用C++类的实例方法,或者处理C++函数,接受或返回C++对象,如STD::String等。您必须用C++语言编写CLI语言的托管包装,而不是< /P> SWIG是一个开源工具,它试图使这类工作更容易。它确实受到经典的“现在你有两个问题”场景的影响,要处理困难的案例,你确实需要学习两件事,pinvoke和SWIG


找到正确的[DllImport]声明的一个很好的资源是您已经找到的,您可以在这里询问有关它的问题。一定要发布确切的C++声明和函数的简短描述。

< p> PINKEK-INOP助手在Windows头文件中使用所谓的SAL注释,以获得更精确的PINEKE声明。SAL帮助工具更好地分析代码,C和C++声明通常不足以确定指针是否指向单个值或值数组,并且不指定数据流,无论是函数所消耗的还是由函数返回的。编写[DllImport]属性时非常重要的事情。SAL补充说,缺少的信息

< >你的C++代码不太可能有这些SAL注释。查找C++声明中的标记,如“<代码> >代码> <代码> >代码>没有这个标记,Pinvoke互操作助手就无法做得更好

另一个挂起的是pJoNKE不支持真正的C++声明,它只适合于C声明。换句话说,您不能调用C++类的实例方法,或者处理C++函数,接受或返回C++对象,如STD::String等。您必须用C++语言编写CLI语言的托管包装,而不是< /P> SWIG是一个开源工具,它试图使这类工作更容易。它确实受到经典的“现在你有两个问题”场景的影响,要处理困难的案例,你确实需要学习两件事,pinvoke和SWIG


找到正确的[DllImport]声明的一个很好的资源是您已经找到的,您可以在这里询问有关它的问题。一定要发布确切的C++声明和简短的函数描述。对于第二个问题,

:如果互操作助手可以为你做这一切,那将是非常令人惊讶的。对于你的第二个问题:如果interop助手能为你完成这一切,那将是非常令人惊讶的。我刚下载了SWIG,我想我还是有点困惑。我不确定如何实际使用它来生成初始包装。在文档中,它只声明他们的示例项目位于C#的文件夹中。根据我所理解的,我不知何故需要对C++项目附加支持,但我无法理解如何做到这一点。我只需要附加它,这样我就可以生成初始的C#代码,或者找出其他方法,从那里我将手动修复它。你认为你能帮我吗?是的,这就是我警告过你的“现在你有两个问题”的情景。不,我帮不了你,我从来不喜欢有两个问题,也不需要喝。谢谢你详细的回答。我真的很感激。我刚刚下载了SWIG,我想我还是有点困惑。我不确定如何实际使用它来生成初始包装。在文档中,它只声明他们的示例项目位于C#的文件夹中。根据我所理解的,我不知何故需要对C++项目附加支持,但我无法理解如何做到这一点。我只需要附加它,这样我就可以生成初始的C#代码,或者找出其他方法,从那里我将手动修复它。你认为你能帮我吗?是的,这就是我警告过你的“现在你有两个问题”的情景。不,我帮不了你,我从来不喜欢有两个问题,也不需要喝。谢谢你详细的回答。我真的很感激。