COM Interop does not detect .NET functions through interface

I have a .NET assembly that I executed regasm and gacutil . I also have COM interoperability with which I am trying to work with a .NET assembly . However, through my pDotNetCOMPtr I cannot "detect" any of the methods in my common .NET interface. The MFC COM DLL continues to say that when trying to compile with Visual Studio 2010, the Encrypt method in _SslTcpClientPtr missing. I am using the .NET 4.0 Framework. Thoughts?

COM / MFC

 extern "C" __declspec(dllexport) BSTR __stdcall Encrypt(BSTR encryptString) { CoInitialize(NULL); ICVTnsClient::_SslTcpClientPtr pDotNetCOMPtr; HRESULT hRes = pDotNetCOMPtr.CreateInstance(ICVTnsClient::CLSID_SslTcpClient); if (hRes == S_OK) { BSTR str; hRes = pDotNetCOMPtr->Encrypt(encryptString, &str); if (str == NULL) { return SysAllocString(L"EEncryptionError"); } else return str; } pDotNetCOMPtr = NULL; return SysAllocString(L"EDLLError"); CoUninitialize (); } 

.NET

 namespace ICVTnsClient { [Guid("D6F80E95-8A27-4ae6-B6DE-0542A0FC7039")] [ComVisible(true)] public interface _SslTcpClient { string Encrypt(string requestContent); string Decrypt(string requestContent); } [Guid("13FE33AD-4BF8-495f-AB4D-6C61BD463EA4")] [ClassInterface(ClassInterfaceType.None)] public class SslTcpClient : _SslTcpClient { ... public string Encrypt(string requestContent) { // do something } public string Decrypt(string requestContent) { // do something } } } } 
+4
source share
1 answer

This is because you forgot the [InterfaceType] attribute so that the interface can be early and method names appear in the type library. Fix:

 [Guid("D6F80E95-8A27-4ae6-B6DE-0542A0FC7039")] [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface _SslTcpClient { // etc.. } 

ComInterfaceType.InterfaceIsDual allows it to be early and late. Microsoft prefers default, IsIDispatch, fewer ways to take off late binding.

+4
source

All Articles