Насколько я понимаю, CR_INIT* это некий абстрактный handle (члены структуры в пользовательском коде не используются).
Поэтому в управляемом коде его объявлять не надо — там где функция в качестве параметра требует CR_INIT** передавать out IntPtr (или ref — по смыслу), где CR_INIT* — просто полученный IntPtr.
И при передаче строковых я бы везде добавил [MarshalAs(UnmanagedType.LPStr)] — вроде бы по умолчанию строки считаются юникодовыми, а сишная сторона явно хочет char*.