C#编组处理HANDLE和CRITICAL_SECTION

问题描述 投票:0回答:1

我们正在开发C#(.NET Core)应用程序。并且我们需要从外部库调用C方法。

但是,在整理某些类型:thread_tlock_t时遇到麻烦。

请在此处查看C的定义:

EXPORT void strsvrinit (strsvr_t *svr, int nout);

typedef struct {        /* stream server type */
    int state;          /* server state (0:stop,1:running) */
    ...
    thread_t thread;    /* server thread */
    lock_t lock;        /* lock flag */
} strsvr_t;

#ifdef WIN32
#define thread_t    HANDLE
#define lock_t      CRITICAL_SECTION
#else
#define thread_t    pthread_t
#define lock_t      pthread_mutex_t
#endif

我们如何实现thread_t(HANDLE)lock_t(CRITICAL_SECTION)类型的封送处理?

感谢您的帮助。

c# c marshalling
1个回答
0
投票

[仅使用IntPtr引用它们如何?我假设您不会从C#代码中修改这些结构,甚至不会尝试将它们按值传递给C代码(不好的主意),而是将其指针传递给P / Invoked函数。

因此只需将它们引用为IntPtr,基本上等同于void*

© www.soinside.com 2019 - 2024. All rights reserved.