средняя ошибка MIDL2379

У нас есть библиотека c ++, и мы автоматически генерируем интерфейс COM для этой библиотеки. поэтому я автоматически сгенерировал файл IDL, и все работало нормально. Но со временем, когда в COM было добавлено больше интерфейса, мы начали получать ошибку

1> Total Format String size = 69336
1> midl : error MIDL2379: the compiler reached a limit for a format string representation. See documentation for advice.

Я получаю эту ошибку в VS2008 и VS2010.

Может кто-нибудь, пожалуйста, помогите мне, как решить эту проблему. Я искал по всему интернету и не мог найти правильное решение. Об одной ошибке сообщается в Microsoft Connect, но его статус закрыт. Один из обходных путей, которые они предлагают, — это разделение файла IDL, что в моем случае невозможно, поскольку интерфейсы зависят друг от друга.

Я загрузил образец файла IDL SampleGenerated.idl

вот командная строка в мидл.

/W1 /nologo /char signed /env win32 /h "SampleGenerated_h.h" /tlb "Debug\SampleGenerated.tlb"

3

Решение

Вот как мне удалось сделать это наконец …

Сначала разделите каждый интерфейс на отдельный файл IDL

Interface1.idl

Interface Interface2; // forward declaration

#ifndef __Interface1_IDL_FILE_
#define __Interface1_IDL_FILE_
import "AllIDLInterface.idl";
[
object,
uuid(66006A2F-B777-4e2f-A0CA-D5BE00000015),
dual,
nonextensible,
pointer_default(unique)
]
interface Interface1 : IUnknown{
HRESULT getInterface2([out, retval]Interface2** outVal )
};
#endif

Interface2.idl

Interface Interface1;// forward delcarations

#ifndef __Interface2_IDL_FILE_
#define __Interface2_IDL_FILE_
import "AllIDLInterface.idl";

[
object,
uuid(66006A2F-B777-4e2f-A0CA-D5BE00000015),
dual,
nonextensible,
pointer_default(unique)
]
interface Interface2 : IUnknown
{
HRESULT getInterface1([out, retval]Interface1** outVal )
};
#endif

Создать другой файл IDL AllInterface.idl содержащий импорт всего файла интерфейса

import Interface1.idl
import Interface2.idl

Теперь main.idl для которого мы будем создавать файлы TLB

import AllInterface.idl;

Единственным недостатком здесь является то, что мы должны скомпилировать каждый файл IDL отдельно, если мы хотим сгенерировать заголовочный файл C ++ / C интерфейсов.

0

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

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

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