Я пишу DLL на C ++, которая будет использоваться в C #.
У DLL есть какая-то функция, где я звоню
hres = CoInitializeEx(NULL, COINIT_MULTITHREADED);
и следующий звонок
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_PKT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
Есть без ошибок , тогда я пытаюсь использовать эту DLL в C ++ . Но если я вызываю функцию из DLL через приложение C #, я вижу ошибку (80010106) Невозможно изменить режим потока после его установки. Я изменил
hres = CoInitializeEx(NULL, COINIT_MULTITHREADED);
до
hres = CoInitialize(NULL);
После этого изменения появляются ошибки после CoInitializeSecurity :
(80010119) Security must be initialized before any
interfaces are marshalled or unmarshalled. It
cannot be changed once initialized.
Как решить эту проблему?