Как избежать C ++ / CLI утверждений неуправляемых классов с помощью константных конструкторов? - PullRequest
0 голосов
/ 04 сентября 2011

Хитрый это:

У меня есть проект C ++ CLI с неуправляемым классом, который регистрируется для обратного вызова с использованием внешней библиотеки и вызывается для этого обратного вызова с указателем на неуправляемый класс данных.

Когда я пытаюсь прочитать элементы, которые были получены в классе данных посредством обратного вызова, я получаю утверждение _crtIsValidHeapPointer (pUserData) в файле: dbgheap.c, строка: 1473.

Я видел, что у класса данных есть сложные поля, а не только блицбольные поля, и я получаю утверждение при получении сложных полей. Я думаю, что это может быть связано со сложными полями, имеющими ссылочные аргументы const в своих конструкторах.

Есть ли у CLI проблемы с вызовом константных ссылок?

Просто для попытки - я попытался просто вызвать конструктор в неуправляемой куче и получил то же утверждение:

CStructure* struct = new CStructure(); // I got assertion here

где конструктор выглядит так:

class CStructure
{

    public:
        CStructure(const CHelper& helperId = CHelper::nullId(),
                   int nInstance = NullInstance);
};

Как мне избежать этого, если в этом проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...