RuntimeCallableWrapper - PullRequest
       9

RuntimeCallableWrapper

1 голос
/ 26 марта 2009

Я получил один COM-компонент и хочу получить доступ из C #. Я создал интерфейс в моей программе на C # и хочу получить доступ к этому компоненту с помощью его CoClass. Когда я создал объект, он дает мне __ComObject, который является RuntimeCallabelWrapper.

Я хочу знать, когда он вернет мне объект и он создаст для меня MethodTable, затем, когда я приведу этот интерфейс к другому интерфейсу, вызову метод другого интерфейса я добавляю метод второго интерфейса или создаю новую MethodTable для этого? Ниже приведен код:

[Guid("169D0491-E149-4BB3-932E-A42C4F8D3478")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface IInventory
{
    void Buy(int quantity, float rate);
    void Sell(int quantity, float rate);
    int GetStock();
}

[Guid("8B08A7ED-8D46-41B2-B8D9-35F4CF37F75B")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAccount
{
    void Credit(double amount);
    void Debit(double amount);
    double GetBalance();
}


[Guid("F8E3E05A-CAFA-4CBD-BC42-DF9328729B01")]
[ComImport]
class Trader{}

public static void Main(string[] args)
{
    IInventory inv = (IInventory) new Trader(); // this gives me RCW
    inv.Buy(qty, 150);

    IAccount acc = (IAccount) inv;   // ?
    Console.WriteLine("Current balance: {0}", acc.GetBalance());
}

1 Ответ

0 голосов
/ 26 марта 2009

IInventory и IAccount совершенно не связаны друг с другом (за исключением того, что они оба унаследованы от IUnknown), и вы не можете разыгрывать из одного в другое. Если класс Trader не реализует их оба, вы тоже не сможете его разыграть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...