Указатель на функцию typedef разрешен только один раз в MIDL?

Вот простой тест. Тип указателя на функцию FN_t появляется дважды в ITest :: Test & ITest :: Test2.

import "oaidl.idl";
import "ocidl.idl";typedef void(* FN_t)();[
uuid(f5d5eb17-45c7-4cce-a176-9ed2e1083d2a),
object,
local,
pointer_default(unique)
]
interface ITest : IUnknown {
HRESULT Test(FN_t pfn);
HRESULT Test2(FN_t pfn); // !error!
}

[
uuid(04f887d2-7412-497a-8189-72e710484bfa)
]
library TestLib {
importlib("stdole2.tlb");

[
uuid(072f49e3-b94c-4d94-a368-ee72db579600)
]
coclass Test {
[default] interface ITest;
}
}

Сообщение об ошибке:
midl \ oleaut32.dll: ошибка MIDL2020: ошибка при создании библиотеки типов: ошибка SetFuncAndParamNames: __MIDL____MIDL_itf_test_0000_00000000 (0x8002802C)

Комментируя ошибку! линия, MIDL работает хорошо. Так почему и как заставить код работать?

================================================== ================================

Я думаю, что могу ответить сам.

Для одного ITest :: Тестовый метод. Интерфейс в сгенерированной библиотеки типов:

    interface ITest : IUnknown {
void _stdcall __MIDL____MIDL_itf_test_0000_00000000();
HRESULT _stdcall Test(ITest* pfn);
};

Кажется, что typelib не знает, что такое тип указателя на функцию.

Затем я добавляю атрибут wire_marshal, и он работает:

import "oaidl.idl";
import "ocidl.idl";

typedef [unique] void *wirePointer;
typedef [wire_marshal(wirePointer)] void(__stdcall *FN_t)();

[
uuid(f5d5eb17-45c7-4cce-a176-9ed2e1083d2a),
object,
local,
pointer_default(unique)
]
interface ITest : IUnknown {
HRESULT Test(FN_t pfn);
HRESULT Test2(FN_t pfn); // ok!!!
}

[
uuid(04f887d2-7412-497a-8189-72e710484bfa)
]
library TestLib {
importlib("stdole2.tlb");

[
uuid(072f49e3-b94c-4d94-a368-ee72db579600)
]
coclass Test {
[default] interface ITest;
}
}

0

Решение

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

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


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