gpt4 book ai didi

python - typedef 不适用于 SWIG(python 包装 C++ 代码)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:27 25 4
gpt4 key购买 nike

您好,感谢您的提前帮助!

我正在为 C++ 代码编写一个 python 包装器(SWIG 2.0 + Python 2.7)。 C++ 代码有 typedef,我需要在 python 包装器中访问它。不幸的是,我在执行 Python 代码时遇到以下错误:

 tag = CNInt32(0)
NameError: global name 'CNInt32' is not defined

我查看了 SWIG 文档第 5.3.5 节,其中将 size_t 解释为 typedef,但我也无法使其正常工作。

以下是重现错误的更简单的代码:

C++ 头文件:

#ifndef __EXAMPLE_H__  
#define __EXAMPLE_H__

/* File: example.h */
#include <stdio.h>

#if defined(API_EXPORT)
#define APIEXPORT __declspec(dllexport)
#else
#define APIEXPORT __declspec(dllimport)
#endif

typedef int CNInt32;

class APIEXPORT ExampleClass {
public:
ExampleClass();
~ExampleClass();

void printFunction (int value);
void updateInt (CNInt32& var);
};

#endif //__EXAMPLE_H__

C++ 源代码:

/* File : example.cpp */
#include "example.h"
#include <iostream>
using namespace std;

/* I'm a file containing use of typedef variables */
ExampleClass::ExampleClass() {
}

ExampleClass::~ExampleClass() {
}

void ExampleClass::printFunction (int value) {
cout << "Value = "<< value << endl;
}

void ExampleClass::updateInt(CNInt32& var) {
var = 10;
}

接口(interface)文件:

/* File : example.i */
%module example

typedef int CNInt32;

%{
#include "example.h"
%}

%include <windows.i>
%include "example.h"

Python代码:

# file: runme.py  
from example import *

# Try to set the values of some typedef variables

exampleObj = ExampleClass()
exampleObj.printFunction (20)

var = CNInt32(5)
exampleObj.updateInt (var)

再次感谢您的帮助。

桑托什

最佳答案

我成功了。我不得不在接口(interface)文件中使用类型映射,见下文:
- 非常感谢 Swig 邮件列表上的“David Froger”。
- 另外,感谢 doctorlove 的初步提示。

%include typemaps.i
%apply CNInt32& INOUT { CNInt32& };

然后在 python 文件中:

var = 5                             # Note: old code problematic line: var = CNInt32(5)
print "Python value = ",var
var = exampleObj.updateInt (var) # Note: 1. updated values returned automatically by wrapper function.
# 2. Multiple pass by reference also work.
# 3. It also works if your c++ function is returning some value.
print "Python Updated value var = ",var

再次感谢!
桑托斯

关于python - typedef 不适用于 SWIG(python 包装 C++ 代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com