Newsgroup: it.comp.lang.c++
Titolo: Libreria COM in C++

Questo codice, scritto in C#, come si traduce in C++?
L'equivalente "Collega riferimento" (libreria COM di excel), come si traduce 
in C++?
Grazie
nero23
Codice C#
// RIFERIMENTO ALLA LIBRERIA  COM DI EXCELL
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
namespace test
{
      class Program
      {
            static void Main(string[] args)
            {
                  Excel.Application excelApp = new Excel.Application();
                  Excel.Workbook FileExcel = 
excelApp.Workbooks.Open("D:\\Master64.xls");
                  Excel.Worksheet FoglioExcel = 
((Excel.Worksheet)FileExcel.Sheets[1]); //seleziono il Foglio 1
                  excelApp = new Excel.Application(); //creo una istanza di 
excel
                  excelApp.Workbooks.Add(); //aggiungo un nuovo documento
                  FileExcel = excelApp.ActiveWorkbook;
                  FoglioExcel = (Excel.Worksheet)excelApp.ActiveSheet;
                  FoglioExcel = FileExcel.Worksheets[3]; // selezione il 
folglio 3
                  FoglioExcel.Range["A1"].Value = "Ciao"; //scrivo 'Ciao' 
nella cella  'A1'
                  FileExcel.SaveAs("D:\\NewExcel.xls"); //salvo il file
                  FileExcel.Close(); //chiudo il file
                  excelApp.Quit(); //esco da excel
            }
      }
} 

Il codice riportato sotto (C#), scrive un testo nella cella A1.
Come si traduce in C++?
L'equivalente di "Collega riferimento" di C#  i n C++?
Grazie
nero23


 L'equivalente di "Collega riferimento" di C# i n C++?
Devi utilizzare la direttiva #import.
Es. per "collegare riferimento" Excel 2002:
#import "MSO.DLL" rename("RGB", "ExclRGB") rename("DocumentProperties", 
"ExclDocumentProperties") rename("SearchPath", "ExclSearchPath")
#import "VBE6EXT.OLB" rename("Window", "VBWindow") rename("Windows", 
"VBWindows") rename("AddIn", "VBAddIn") rename("MenuItems", "VBMenuItems")
#import "EXCEL.EXE" rename("DialogBox", "ExclDialogBox") rename("RGB", 
"ExclRGB") rename("CopyFile", "ExclCopyFile") rename("ReplaceText", 
"ExclReplaceText")
Sulle opzioni di Visual Studio (Visual C++ Directories) o del progetto 
(additional include directories), devi impostare i path di ricerca dei 3 
file importati, oppure scrivi il path completo dei 3 file nella #import.
Fatto questo, puoi utilizzare la libreria COM, in questo modo:
	Excel::_ApplicationPtr excelApp;
	HRESULT hr = excelApp.CreateInstance(_T("Excel.Application"));
	Excel::_WorkbookPtr FileExcel = 
excelApp->GetWorkbooks()->Open(_T("D:\\Master64.xls"));
	Excel::_WorksheetPtr FoglioExcel = 
FileExcel->GetWorksheets()->GetItem(1); //seleziono il Foglio 1
Eccetera...
Tieni conto che i vari oggetti delle librerie COM in C++ vengono 
rappresentati da smart pointers (template _com_ptr_t).
Quando usi #import per linkare una libreria COM, nella cartella di 
output (Debug, Release) il compilatore crea i file tlh e tli della 
libreria, nel tuo caso excel.tlh e excel.tli. In particolare, il file 
tlh ti può essere utile per vedere tutte le definizioni delle classi e 
delle funzioni.
Per il resto, vedi su MSDN, Google & co.


Grazie 1001
nero23