Mar*_*ier 14
对于我的上一个项目,这是整个C#SWIG配置文件:
%module mdProject
%{
#include "mdProject.h"
%}
Run Code Online (Sandbox Code Playgroud)
我在SWIG编译它:
swig -csharp -c++ -I../../Include mdProject.i
Run Code Online (Sandbox Code Playgroud)
这生成了一个Project.cxx,我编译并直接链接到'main'DLL,所以我不需要第二个C++'helper'DLL.SWIG还生成了一堆C#文件,我将其编译成.NET DLL.我的其他包装器(Java,PHP等)确实使用了辅助DLL.
正如@patrick所提到的,SWIG使用P/Invoke,所以如果你遇到问题,你需要找到另一个解决方案.
如果你使用偏离普通类型(空洞,结构等)的类型,你将不得不做一些额外的工作来使它正确,但对于使用int,char*等的普通API,它没关系.
我认为早期海报所犯的错误是阅读文档而不是看例子.
几个小时前,我需要将一些C++类与C#接口.我查看了我的Swig目录(我已经将其用于其他工作),找到目录Examples/csharp/class,浏览代码,加载解决方案,grokked,复制它,放入我的代码,它工作,我的工作完成了.
话虽如此,生成的P/Invoke代码并不是满足所有需求的解决方案.根据您的项目,自己编写一些简单的API包装器或编写托管C++可能同样简单(查找SlimDX以获得极好的示例).
根据我的需要,它很简单 - 我有mystuff.dll,现在我可以运送了 mystuffnet.dll.我同意该文档很难进入.
编辑:我注意到OP只提到了C.为此,你真的不需要Swig,只需使用通常的C#/ C DLLImport互操作语法.当您想要从C#调用C++类时,Swig会很有用.