Просто для того, чтобы добавить информацию людям, прибегающим к помощи этой web.config:
C: \ Program Files \ Common Files \ Microsoft Shared \ Расширения веб-сервера \ 12 \ ISAPI
<location path="Copy.asmx"> <!-- Name of you asmx -->
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600"/> <!-- 100 megs -->
</requestFiltering>
</security>
</system.webServer>
</location>
This решил проблему после устранения этой проблемы за довольно сомнительное время.
По крайней мере, для GCC enum
представляет собой простой числовой тип. Это может быть 8-, 16-, 32-, 64-битный или любой другой (я тестировал его с 64-битными значениями), а также подписанный
или беззнаковый
. Я предполагаю, что он не может превышать long long int
, но на практике вы должны проверить диапазон ваших enum
s и выбрать что-то вроде c_uint
.
Вот пример пример. Программа C:
enum batch_op {
OP1 = 2,
OP2 = 3,
OP3 = -1,
};
struct attrl {
char *name;
struct attrl *next;
enum batch_op op;
};
void f(struct attrl *x) {
x->op = OP3;
}
и программа Python:
from ctypes import (Structure, c_char_p, c_uint, c_int,
POINTER, CDLL)
class AttrList(Structure): pass
AttrList._fields_ = [
('name', c_char_p),
('next', POINTER(AttrList)),
('op', c_int),
]
(OP1, OP2, OP3) = (2, 3, -1)
enum = CDLL('./libenum.so')
enum.f.argtypes = [POINTER(AttrList)]
enum.f.restype = None
a = AttrList(name=None, next=None, op=OP2)
assert a.op == OP2
enum.f(a)
assert a.op == OP3
Можно использовать c_int
или c_uint
. В качестве альтернативы, в кулинарной книге есть рецепт для класса Enumeration.