Я пишу 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);
to
hres = CoInitialize(NULL);
После этих изменений появляется ошибка после CoInitializeSecurity:
(80010119) Security must be initialized before any
interfaces are marshalled or unmarshalled. It
cannot be changed once initialized.
Как решить эту беду?