MSVC C ++ не может #Import TLB, если он неявно импортирует LIB, который не может быть найденC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 MSVC C ++ не может #Import TLB, если он неявно импортирует LIB, который не может быть найден

Сообщение Anonymous »

Я использую MSVC, и у меня есть следующий код C ++, который импортирует TLB: < /p>

Код: Выделить всё

#include 

#import "testlib.tlb" exclude("RibbonX")

int main()
{

std::cout 
Это определение IDL TLB: < /p>

[
uuid(F82AE622-3587-4A8C-9988-6545D3470745),
version(1.1),
custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, "TestLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null")

]
library TestLib
{
// TLib : mscorlib.dll : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}
importlib("mscorlib.tlb");
// TLib : Microsoft Office 16.0 Object Library : {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
importlib("MSO.DLL");
// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");

// Forward declare all types defined in this typelib
interface IApiTest;
interface _RibbonX;

[
uuid(897DFEAC-AF86-3655-9E0F-B7887C17EC71),
version(1.0),
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "TestLib.RibbonX")
]
coclass RibbonX {
[default] interface _RibbonX;
interface _Object;
interface IRibbonExtensibility;
};

[
odl,
uuid(F7668A1E-5134-4932-BBD6-6DCE9E353AEF),
version(1.0),
dual,
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "TestLib.IApiTest")

]
interface IApiTest : IDispatch {
[id(0x00000001)]
HRESULT TestFuncOne(
[in] BSTR name);
[id(0x00000002)]
HRESULT TestFuncTwo(
[in] BSTR name,
[in, out] BSTR* title);
};

[
odl,
uuid(94D30EDD-51BF-3072-B161-C23E59FA703F),
hidden,
dual,
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "TestLib.RibbonX")

]
interface _RibbonX : IDispatch {
};
};

< /code>
Я использовал следующую команду, используя Midl для компиляции TLB (вам нужно установить Office для mso.dll): < /p>
midl .\testlib.IDL /I "C:\Program Files\Microsoft Office\root\vfs\ProgramFilesCommonX64\Microsoft Shared\Office16"
Теперь у меня есть куча машин сборки без установленного офиса . Поэтому я поместил атрибут exclude () в директиву #Import для удаления интерфейса, которая неявно использует MSO.DLL. Если я переключаюсь на вкус x64, он не удастся.
Если у меня есть этот MSO.DLL, зарегистрированный в моих системах, компиляция кода C ++, в аромате x64 или x86, он работает. Неудач. Что происходит?

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-be-found
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»