2017-01-30 7 views
0

Ich versuche, eine stdafx.cpp-Datei zu erstellen, die alle #imports in einem Projekt enthält, um die Erstellungszeit zu verbessern. Ich möchte alle Importe für Word/Excel/PPT Office 2010, 2013 und 2016 einschließen.#import generiert falsche TLH-Datei

Wenn ich alle Importe in die CPP platzieren, gibt es kein Problem, aber wenn ich alle #imports in die STDAFX .cpp. cx_excel2013.tlh wird falsch generiert.

Das Problem ist, dass cx_excel2013.tlh für Objekte in „Office2013“, zu verwenden „Office2010“ Namespace versucht, die die Build fehlschlagen verursacht. zum Beispiel enum Office2010 :: MsoTriState LinkToFile wird generiert, die den Build fehlschlägt.

Kann jemand erklären, was vor sich geht oder was passiert und wie man das überwinden kann (ohne die #imports zurück zum CPP zu schicken) ??? Auch dachte ich daran, nur die TLH/TLI zu generieren und die Importe alle zusammen zu entfernen, weil sie sich nicht ändern, aber es fühlt sich falsch an und ich löse das wirkliche Problem nicht.

Danke!

Stdafx.cpp:

// Office 2010 
#import "..\lib\tlb\office\MSO2010.tlb"  rename_namespace("Office2010") rename("RGB","msoRGB") rename("SearchPath", "msoSearchPath") rename("DocumentProperties", "msoDocumentProperties") 
#import "..\lib\tlb\office\VBE6EXT2010.tlb" rename_namespace("VBE6EXT2010") rename("Property", "vbeProperty") 
#pragma warning(disable: 4192) 
#import "..\lib\tlb\office\excel2010.tlb" rename_namespace("Excel2010") rename("VBE6", "VBE6EXT2010") rename("RGB","excelRGB") rename("DialogBox","excelDialogBox") rename("CopyFile","excelCopyFile") rename("ReplaceText","excelReplaceText") rename("Property", "excelProperty") no_function_mapping 
#import "..\lib\tlb\office\msppt2010.tlb" rename_namespace("PowerPoint2010") rename("VBE6", "VBE6EXT2010") rename("RGB","pptRGB") rename("Property", "pptProperty") no_function_mapping 
#import "..\lib\tlb\office\MSWORD2010.tlb" rename_namespace("Word2010") rename("VBE6", "VBE6EXT2010") rename("ExitWindows","wordExitWindows") rename("FindText","FindText1") rename("RGB", "wordRGB") no_function_mapping 
#pragma warning(default: 4192) 

// Office 2013 
#import "..\lib\tlb\office\MSO2013.tlb"  rename_namespace("Office2013") rename("RGB","msoRGB") rename("SearchPath", "msoSearchPath") rename("DocumentProperties", "msoDocumentProperties") 
#import "..\lib\tlb\office\VBE6EXT2013.tlb" rename_namespace("VBE6EXT2013") rename("Property", "vbeProperty") 
#pragma warning(disable: 4192) 
#import "..\lib\tlb\office\excel2013.tlb" rename_namespace("Excel2013") rename("VBE6", "VBE6EXT2013") rename("RGB","excelRGB") rename("DialogBox","excelDialogBox") rename("CopyFile","excelCopyFile") rename("ReplaceText","excelReplaceText") rename("Property", "excelProperty") no_function_mapping 
#import "..\lib\tlb\office\msppt2013.tlb" rename_namespace("PowerPoint2013") rename("VBE6", "VBE6EXT2013") rename("RGB","pptRGB") rename("Property", "pptProperty") no_function_mapping 
#import "..\lib\tlb\office\MSWORD2013.tlb" rename_namespace("Word2013") rename("VBE6", "VBE6EXT2013") rename("ExitWindows","wordExitWindows") rename("FindText","FindText1") rename("RGB", "wordRGB") no_function_mapping 
#pragma warning(default: 4192) 

// Office 2016 
#import "..\lib\tlb\office\MSO2016.tlb"  rename_namespace("Office2016") rename("RGB","msoRGB") rename("SearchPath", "msoSearchPath") rename("DocumentProperties", "msoDocumentProperties") 
#import "..\lib\tlb\office\VBE6EXT2016.tlb" rename_namespace("VBE6EXT2016") rename("Property", "vbeProperty") 
#pragma warning(disable: 4192) 
#import "..\lib\tlb\office\excel2016.tlb" rename_namespace("Excel2016") rename("VBE6", "VBE6EXT2016") rename("RGB","excelRGB") rename("DialogBox","excelDialogBox") rename("CopyFile","excelCopyFile") rename("ReplaceText","excelReplaceText") rename("Property", "excelProperty") no_function_mapping 
#import "..\lib\tlb\office\msppt2016.tlb" rename_namespace("PowerPoint2016") rename("VBE6", "VBE6EXT2016") rename("RGB","pptRGB") rename("Property", "pptProperty") no_function_mapping 
#import "..\lib\tlb\office\MSWORD2016.tlb" rename_namespace("Word2016") rename("VBE6", "VBE6EXT2016") rename("ExitWindows","wordExitWindows") rename("FindText","FindText1") rename("RGB", "wordRGB") no_function_mapping 
#pragma warning(default: 4192) 

EDIT: Ich sollte hinzufügen, dass die Erstellung fehl und der andere TLH/TLIs erzeugt nicht werden.

Antwort

0

Das Problem war, dass alle Office-Versionen die gleiche GUID verwenden, der einzige Unterschied ist die Version, die die # Import-Anweisung ignoriert.

Aus diesem Grund wird beim Erstellen von Excel2013.tlh/tli Office2010 (der erste Office-TLB) verwendet, da die zu suchende GUID bereits definiert ist, sodass Office2013 ignoriert werden kann. Aus Sicht von VS ist es dasselbe.

Die Schnittstellen sind abwärtskompatibel, daher importierte die Lösung nur das Jahr 2016. Der Nachteil ist, dass der Office2010/2013-Code versuchen kann, Code zu verwenden, den er nicht wirklich unterstützt (schlägt während der Laufzeit fehl).

Verwandte Themen