如何使用SWIG

时间:2017-07-05 06:56:40

标签: c# mfc swig

我必须重建用C ++ / MFC& A编写的软件。 Unicode格式。有两个程序集,一个服务器和一个客户端。客户端必须在C#+ WPF中重建。 最初,两个程序集都包含一个.h文件,以共享一些全局值。我也希望在新的C#程序集中使用这些值。

我的第一种方法是使用SWIG。所以我创建了一个包含.h文件的测试项目(输出DLL),让它做了魔术。 这导致C ++项目的C ++包装器和一些.cs文件。 然后我创建了一个C#WPF应用程序,包括DLL和swig生成的cs文件。

到目前为止一切顺利。

.h文件基本上包含int变量,包含每个枚举的类和一些LPCTSTR字符串(因为我使用Unicode,所以是wchar_t *)。

const LPCTSTR ProductName = _T("XYZ");
const int MAX_MESS_ITEMS = 200;
class SPS
{
public:
    enum SPS
    {
        SPS1 = 1,
        SPS2 = 2,
        SPS3 = 3,
    };
};

使用int和enums是没有问题的,但是swig无法将LPCTSTR转换为C#字符串(不进行一些自定义)。 Swig生成SWIGTYPE_p_LPCTSTR类型,不允许我获取.h文件中定义的字符串的原始内容。

作为下一个方法,我浏览了SWIG文档(我使用的是3.0.12版),并了解了typedef和typemaps。 我试图包含windows.i,这给了我分配给LPCTSTR变量的字符串的第一个字母。 接下来我试图弄清楚如何使用类型图,但我不能让它工作。对我来说,很难理解如何创建一个类型图(我有一些问题,了解在那里做了什么以及语法是如何工作的)。 lib(我用swigwin.zip下载的)包含std :: string等的一些类型图也无济于事。 此外,对stackoverflow和MSDN的研究并没有让我更接近解决方案。

是否有关于如何创建用于转换字符串的类型图(特别是LPCTSTR)的良好说明或示例? 还有哪些易于使用的工具可以帮助您完成工作?我是否应该停止使用SWIG并使用_declspec(dllexport)内容(我没有任何经验)?

我不需要转换函数或高度设计的类。只是字符串,int和枚举。 由于两个程序集通过一个namedpipe进行通信,我担心在启动应用程序时通过管道发送一些数据,但是在管道开始工作之前需要来自全局变量的一些信息。

对此有任何帮助表示赞赏:)

0 个答案:

没有答案