bool указатель с C ++ на C #

Я хочу использовать функцию в C ++ DLL в моем приложении C #, используя DLLImport:

BOOL IsEmpty (DWORD KeyID, BOOL * pFlag)

Я перепробовал много комбинаций, но тщетно .. вроде:
public extern static bool IsEmpty (int KeyID, ref bool pFlag);
Метод возвращает false (это означает ошибку)

У кого-нибудь есть идеи о том, как это сделать?

Спасибо!

3

Решение

к цитата «Вилли» (с изменениями):

Остерегайтесь логических значений!

Win32 определяет разные версии логических значений.

1) BOOL, используемый большинством Win32 API, неподписанный int подписанный int (4 байта)

2) BOOLEAN — это один байт, используемый только несколькими win32 API !!

3) и C / C ++ имеет встроенный «bool», который представляет собой один байт

…и добавить то, на что указал @tenfour:

4) еще более странный VARIANT_BOOL

typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)

Характер со знаком или без знака не должен иметь значения для BOOL, поскольку единственный «ложный» шаблон равен 0. Поэтому попробуйте трактовать его как 4-байтовое количество … однако вы взаимодействуете с DWORD может быть удовлетворительным, (Я не имел дело с 64-битными соглашениями Windows.)

4

Другие решения

BOOL в Win32 это typedef из int, так что вы должны просто изменить bool в Int32так что определение int IsEmpty(uint KeyID, ref int pFlag)

1

потому что в c ++ BOOL определяется как int. Вы должны использовать

    [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern  bool IsEmpty(uint KeyID, ref int pFlag) ;
1

Спасибо за помощь!

наконец-то это работает для меня

public extern static int IsEmpty (
int KeyID,
int [] pFlag)

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector