Using DLL that using COM in C#
- by chekalin-v
I have been writing DLL on C++, that will be use in C#.
DLL have some function, where I call
hres = CoInitializeEx(NULL, COINIT_MULTITHREADED);
and next call
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
);
There are no error then I trying to use this dll in C++. But if I call function from DLL via C# application I see Error (80010106) Cannot change thread mode after it is set. I changed
hres = CoInitializeEx(NULL, COINIT_MULTITHREADED);
to
hres = CoInitialize(NULL);
After this changes error appear after CoInitializeSecurity:
(80010119) Security must be initialized before any
interfaces are marshalled or unmarshalled. It
cannot be changed once initialized.
How resolve this trouble?