Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.1k views
in Technique[技术] by (71.8m points)

c# - Marshal a struct containing pointer to array

How to correctly marshal this C struct with pointer to array and pointer to pointer members in C# for use with 3rd party dll?

C:

typedef struct SomeStruct {
    uint8_t *data[8];
    uint8_t **extended_data;
};

Is it all just IntPtr and then you need to allocate the un-mamaged memory, copy data into it, and pin it? How would you do this if it's the case? The struct gets initialized through a function inside dll.

In python this is how I'd wrap and use this struct:

Python:

class SomeStruct(Structure):
    _fields_ = [
         ('data', POINTER(c_uint8) * 8),
         ('extended_data', POINTER(POINTER(c_uint8)))
    ]

dll = ctypes.CDLL("lib.dll")
some_struct = SomeStruct()
dll.init(ctypes.byref(some_struct))

# or example 2
alloc_struct_fce = dll.alloc_struct
alloc_struct_fce.restype = ctypes.POINTER(SomeStruct)   # specify return type
some_stryct_ptr = alloc_struct_fce()    # this gets passed to other dll functions

Trying to find a C# equivalent.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...