从dll访问类的静态成员 我有C++编写的应用程序,使用SWIG进行Python集成。
现在,在linux/osx下,当我构建swig包装器时,它会创建一个这样的文件,从这样的应用程序中使用从dll访问类的静态成员 我有C++编写的应用程序,使用SWIG进行Python集成。,c++,dll,shared-libraries,swig,shared-objects,C++,Dll,Shared Libraries,Swig,Shared Objects,现在,在linux/osx下,当我构建swig包装器时,它会创建一个这样的文件,从这样的应用程序中使用 Py_Initialize(); PyRun_SimpleString("import MoBridge"); PyRun_SimpleString("a = MoBridge.MoBridge()"); PyRun_SimpleString("a.CreateQuadMesh()"); Py_Finalize(); PyImport_AppendInittab("_MoBridge", P
Py_Initialize();
PyRun_SimpleString("import MoBridge");
PyRun_SimpleString("a = MoBridge.MoBridge()");
PyRun_SimpleString("a.CreateQuadMesh()");
Py_Finalize();
PyImport_AppendInittab("_MoBridge", PyInit__MoBridge);
<>这是导入包装器莫布里奇,然后调用包装器C++函数CreateQuadMesh。包装器大致如下所示
h文件:
#include "MoEngine.h"
class MoBridge
{
public:
MoBridge();
~MoBridge();
void CreateQuadMesh();
};
cpp文件:
#include "mobridge.h"
void MoBridge::CreateQuadMesh()
{
MoEngine::CreateMesh();
}
包装器调用MoEngine静态函数,然后执行它所执行的操作
如果我理解正确的话,这在Linux/osx下非常有效,因为so文件的链接方式
但在windows下,我必须创建DLL,而且据我所知,DLL文件的加载方式不同,因此它们与应用程序的其余部分位于不同的内存中,因此无法看到其他静态方法的应用程序
我知道我可以使用dllexport将dll中的方法公开给应用程序的其余部分。但在本例中,我将介绍如何允许dll访问应用程序内存中的其余应用程序静态函数
如果有人遇到这个问题,我会非常感激。如果有人在linux、osx和windows中遇到这个问题,我已经找到了解决方案 使用共享对象*.so当然可以在linux/osx上使用,但幸运的是,SWIG中有一个更容易使用的解决方案,它实际上没有在SWIG中记录,但在python文档中记录了。谢谢python 为了实现这一点,您不需要从包装器中创建dll或其他文件,但在swig创建*\u wrap.cxx文件后,您应该将其包含在项目中,在调用Py\u Initialize之前,您可以像这样导入模块
Py_Initialize();
PyRun_SimpleString("import MoBridge");
PyRun_SimpleString("a = MoBridge.MoBridge()");
PyRun_SimpleString("a.CreateQuadMesh()");
Py_Finalize();
PyImport_AppendInittab("_MoBridge", PyInit__MoBridge);
然后,您可以使用前面提到的:
Py_Initialize();
PyRun_SimpleString("import MoBridge");
PyRun_SimpleString("a = MoBridge.MoBridge()");
PyRun_SimpleString("a.CreateQuadMesh()");
Py_Finalize();
基本上,因为您的项目中有*_wrap.cxx,而python基本上就存在于您的应用程序中,因为您初始化了它,所以您的行为与在linux/osx中使用的行为完全相同,除了这三种平台上的工作
干杯我认为这些是你的问题。读一读