Developing Com Wrapper to .NET Lib

1

I'm trying to create a COM Wrapper to an existing .net Lib.

Nothing seems to work from a COM perspective. I started "walking" back until nothing of my code remained

I tried a basic C++ COM client pointing to a sample .net Server to figure out if the COM interop was working.

I can __uuidof() and get the propper UUID, but createIntance in _com_ptr_t returns Class Not Registered, and point to IPtr is null.

c++ client:

#include <iostream>
#define _WIN32_DCOM



#import "..\\bin\\Debug\\TestServer.tlb"


using namespace TestServer;
int main()
{
    std::cout << "Hello, World!";



    TestServer::_Numbers *com_ptr;

    CoInitialize(NULL);

    TestServer::_NumbersPtr p(__uuidof(TestServer::Numbers));

    com_ptr = p;

    int m_iDay = com_ptr->GetDay();

    std::cout << m_iDay;



    return 0;
}

the .Net Server:

    using System;
using System.Runtime.InteropServices;

namespace TestServer
{
    [Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _Numbers
    {
        [DispId(1)]
        int GetDay();

    }

    [Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("Tester.Numbers")]
    public class Numbers : _Numbers
    {
        public Numbers(){}

        public int GetDay()
        {
            return(DateTime.Today.Day);
        }


    }
}

I've check and oleView can get the TypeLib, that is as follows:

// Generated .IDL file (by the OLE/COM Object Viewer)
// 
// typelib filename: TestServer.tlb

[
  uuid(AB9E360D-4B96-32C2-AB45-66E4A99A5FF0),
  version(1.0),
  custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, "TestServer, Version=1.0.6670.3022, Culture=neutral, PublicKeyToken=null")

]
library TestServer
{
    // TLib : mscorlib.dll : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}
    importlib("mscorlib.tlb");
    // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    // Forward declare all types defined in this typelib
    dispinterface _Numbers;

    [
      uuid(D6F88E95-8A27-4AE6-B6DE-0542A0FC7039),
      version(1.0),
      custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "TestServer._Numbers")    

    ]
    dispinterface _Numbers {
        properties:
        methods:
            [id(0x00000001)]
            long GetDay();
    };

    [
      uuid(13FE32AD-4BF8-495F-AB4D-6C61BD463EA4),
      version(1.0),
      custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "TestServer.Numbers")
    ]
    coclass Numbers {
        interface _Object;
        [default] dispinterface _Numbers;
    };
};

What am i missing?

Can this be something related to OS (Win 7 Ultimate x64)?

Garbage on GACL?

How do I cleanup?

Thanks in advance. Any comment is helpfull as I can't seem to sort this out. Focus should be on my project and not on COM basics

THANKS

Credits: Sample code reused from Nick Parker (https://www.codeproject.com/Articles/3511/Exposing-NET-Components-to-COM#mfc)

c#
.net
com
visual-studio-2017
asked on Stack Overflow Apr 6, 2018 by DrBoo • edited Apr 6, 2018 by DrBoo

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0