3
我一直在C++上编写DLL,这将在C#中使用。 DLL有一定的功能,在那里我称之为使用在C#中使用COM的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++。但是,如果我通过C#应用程序从DLL调用函数,则会看到错误(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)。我无法确定将这些调用放在托管应用中的位置。 – 2015-04-01 09:29:55