У меня есть интерфейс определения в C #, например:
[ComVisible(true), Guid("E37EBA3C-FB2E-4D4A-8A90-F6FAA99E85C9")]
public interface TestClass
{
public void test_function();
}
Я хочу включить это в определение библиотеки в IDL. Я попытался добиться этого, сгенерировав .tlb из интерфейса C # и включив его в importlib. Тем не менее, я не вижу этот интерфейс в моей библиотеке, когда я компилирую свой файл idl, но я вижу все другие интерфейсы, которые я определил в этой библиотеке, путем импорта их файлов idl.
import "AnotherClass.idl"library COMMONPROGRAMS{
importLib(stdole32.tlb)
importLib(stdole2.tlb)
importLib(TestClass.tlb)
interface TestClass;
interface AnotherClass;
}
Итак, я хочу знать:
Все ответы приветствуются. Заранее благодарю за любые ответы.
Когда вы импортируете TLB с importlib
вы не видите интерфейсы в текущем TLB, так как они не являются частью этого TLB. Эти интерфейсы уже определены в TestClass
библиотека типов, поэтому они не могут иметь другое определение в CommonPrograms
библиотека.
Если вы хотите определить интерфейс в другом месте, но сделать его частью своего TLB, вам нужно импортировать его с import TestClass.idl
, Один из способов создания IDL из TLB — открыть TLB в OLE / COM Object Viewer и выбрать File->Save As
, а затем отредактируйте его. Я полагаю, что это не то, что вы хотите, так как, скорее всего, вы хотите автоматизировать эту процедуру.
Однако с importlib
вы все еще можете ссылаться TestClass
интерфейс из типов CommonPrograms, так что это обычно не является большим препятствием, но это, очевидно, зависит от ваших требований.
Других решений пока нет …