Я писал DLL на C++, который будет использоваться в C#. DLL есть функция, где я называюИспользование DLL, использующего COM в C#
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.
Как решить эти проблемы?
Спасибо. Пожалуйста, посмотрите [этот связанный вопрос] (http://stackoverflow.com/q/29385515/938668). Я не могу понять, где разместить эти вызовы в управляемом приложении. –