Запрос PINVOKE (длинный без знака *) - PullRequest
2 голосов
/ 09 мая 2011

Я пытаюсь вызвать функцию C, которая принимает следующую структуру в качестве параметра:

typedef struct CSTRUCT
{
    unsigned long* p1;
    unsigned long* p2;
    unsigned long* p3;
    unsigned long* p4;
} CSTRUCT;

Мне нужно вызвать функцию из C # и мне нужно знать эквивалент C # pinvoke для этого Cструктура.Кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

unsigned long* p1 в C - просто указатель, который вы обычно объявляете как IntPtr в C #Это легкая часть процесса.Сложная часть - как назначить указатель.Указатель на память принадлежит коду C?Или это память принадлежит коду C #?И кто пишет в эту память, код C или код C #?Вам нужно знать ответы на эти вопросы, прежде чем вы сможете продвигаться вперед.

1 голос
/ 09 мая 2011

Один инструмент, который я считаю полезным, - это генератор подписи P / Invoke, который можно бесплатно загрузить (через журнал MSDN и этот блог )

Код C #, который он генерирует:

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct CSTRUCT {

    /// unsigned int*
    public System.IntPtr p1;

    /// unsigned int*
    public System.IntPtr p2;

    /// unsigned int*
    public System.IntPtr p3;

    /// unsigned int*
    public System.IntPtr p4;
}
...