У меня есть проект C #, который создает COM-объект для использования с POS-терминалом. Прежде чем дать его клиенту, я хочу убедиться, что он будет работать как COM DLL. RegAsm говорит, что это работает.
using System;
using System.Runtime.InteropServices;
namespace POS
{
[Guid( "0135bc5c-b248-444c-94b9-b0b4577f5a1a" )]
[InterfaceType( ComInterfaceType.InterfaceIsDual )]
[ComVisible( true )]
public interface ITwoWay
{
// The Initialize method is called to establish the communications connection...
[DispId( 1 )]
void Initialize( String IPAddress, long Port, long MaxPacketSize );
// A convenience method that allows the POS to test the Third Party’s back-end...
[DispId( 2 )]
void TestConnect();
// The Terminate method is called to indicate that the POS system is about to terminate...
[DispId( 3 )]
void Terminate();
// All interface calls made during a transaction send the same record format with specific reply fields ...
[DispId( 4 )]
void TransactionCall( String viPOSMsg, ref String InterceptArray );
}
}
Фактические точки входа определены в классе TwoWay
using System.Runtime.InteropServices;
using System.EnterpriseServices;
namespace POS
{
[Guid( "0135bc5c-b248-444c-94b9-b0b4577f5a1b" )]
[ComDefaultInterface(typeof(ITwoWay))]
[ClassInterface( ClassInterfaceType.None )]
[ComVisible( true )]
public class TwoWay : ITwoWay
...
[ComVisible( true )]
public void Initialize( string iPAddress, long port, long maxPacketSize )
...
Я думал, что смогу импортировать .tlb в другой проект .net и протестировать его таким образом, но когда я добавляю свой COM-проект в качестве ссылки COM, VS отклоняет его, потому что он был создан как .NET dll.
Я пытался создать VB-скрипт для запуска CreateObject, но с ошибками в разрешениях. Я пытался настроить учетную запись I_USER и т. Д., Но я не смог этого сделать.
В реестре отображается запись с правильным именем, а для идентификатора класса установлено правильное значение guid. Но все же я хочу загрузить его и запустить через интерфейс COM.
Как проверить, что COM .dll на самом деле является COM .dll? Сколько бы лет ни было, должен быть способ.