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