MIDL: правильный синтаксис для вывода пространств имен для пользовательских типов / перечислений?

Я взял мою сборку .NET, использовал OleView для генерации файла IDL, теперь использую

midl /header MyAssembly.h MyAssembly.tlb

создать заголовочный файл для использования в действительно старом COM-проекте.

Теперь MyAssembly.dll ссылается на MyAssembly.Core.dll — поэтому я создал файл IDL для MyAssembly.Core.dll, а также mscorlib.dll и успешно сгенерировал мои файлы .i_c и .h из midl для всех трех.

Проблема в том, что файлы .h не содержат пространства имен! Я получаю вывод, как это:

virtual /* [id] */ HRESULT STDMETHODCALLTYPE DoThing(
/* [in] */ MyEnums MyEnum) = 0;

когда я ожидаю увидеть:

virtual /* [id] */ HRESULT STDMETHODCALLTYPE DoThing(
/* [in] */ MyAssembly_Core::MyEnums MyEnum) = 0;

MyAssembly.idl:

import "MyAssembly.Core.idl";
[
uuid(1ED54182-DF43-4FF4-9887-1C105E50427D),
version(1.0),
custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, "MyAssembly, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null")
]
library MyAssembly
{
// TLib :     // TLib :  : {515919C5-1821-44B6-8B7A-C42045E2483A}
importlib("MyAssembly.Core.tlb");
// TLib : mscorlib.dll : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}
importlib("mscorlib.tlb");
// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
(the rest of the idl)

И MyAssembly.Core.dll:

import "mscorlib.idl";
[
uuid(515919C5-1821-44B6-8B7A-C42045E2483A),
version(1.0),
custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, "MyAssembly.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
]
library MyAssembly_Core
{
// TLib :     // TLib : mscorlib.dll : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}
importlib("mscorlib.tlb");
// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");

typedef [uuid(E01EAD76-4F8F-4B76-AF58-FCC03609EB61), version(1.0),
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "MyAssembly.Core.MyEnums")
]
enum {
MyEnum_UNKNOWN = 0xffffffff,
MyEnum_One = 1,
MyEnum_Two = 2
} MyEnums;
(the rest of the idl)

Наконец, mscorlib.idl:

#if (__midl >= 800)
midl_pragma warning(disable: 2362)
#endif

[
uuid(BED7F4EA-1A96-11D2-8F08-00A0C9A6186D),
version(2.4),
helpstring("mscorlib.dll"),
custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
]
library mscorlib
{
// TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
(the rest of the idl)

Я что-то здесь упускаю, я просто не уверен, что.

Так как же заставить IDL генерировать правильные пространства имен для выходных заголовочных файлов?

Спасибо,

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]