Почему код Delphi пашет, а аналог. C# нет (MS Office)
От: Yozh_Programmer  
Дата: 18.09.04 22:24
Оценка:
Создаю проект на С# Windows Application.
Добавляю Reference на Word указывая путь \Program Files\Microsoft Office\Office11\MSWORD.OLB
и на компоненты Graph.exe, указывая путь \Program Files\Microsoft Office\Office11\Graph.exe
(для MS Office 2003, для MS Office XP \Program Files\Microsoft Office\Office10\MSWORD.OLB(Graph.exe))

Где-то в начале


using System.Reflection;


Далее:


private void button1_Click(object sender, System.EventArgs e)
{
    object _Missing = Missing.Value;
    Word._Application App = (new Word.ApplicationClass()).Application;
    Word.Document Doc = App.Documents.Add(ref _Missing, ref _Missing, ref _Missing, ref _Missing);
    object ClassStrID = "MSGraph.Chart";
    Graph.Chart Chart = (Graph.Chart)Doc.InlineShapes.AddOLEObject(
        ref ClassStrID, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing, ref _Missing).OLEFormat.Object;
    Chart.Application.DataSheet.Cells.Clear();
}


В последней строке вызывает exception: "Old format or invalid type library".

Аналогичный код на Delphi7 пашет, кроме того с макросом на VBA все также нормально работает.

Юзаю Windows XP SP2, MS VS 2003, MS Office 2003. Проверял на Office XP, и без XPSP2.

Да, и проверял на другой машине на которой стоит XP (не помню правда стоял ли SP1), с MS Office XP и MS VS 2003: тоже все пашет.

Почему такое может происходить, может кто-нибудь кстати сможет на своей машине проверить?
Re: Почему код Delphi пашет, а аналог. C# нет (MS Office)
От: Yozh_Programmer  
Дата: 18.09.04 23:25
Оценка: 19 (2)
Сорри за пост, я уже нашел в чем трабла, но думаю ВАМ будет интересно почему она возникла, т.к. возникает она и при юзании Excel и во многом другом тоже может возникнуть.
Причина в том, что региональные настройки не совпадают с EN совместимыми (или подобными). Для того, чтобы это обойти можно вызывать в "критических" к этому участках кода следующее

System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
/* код */
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
Re: Почему код Delphi пашет, а аналог. C# нет (MS Office)
От: Аноним  
Дата: 20.09.04 07:39
Оценка:
Это, кстати, известная проблема, давно описанная в http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_vsto2003_ta/html/VSTOFAQ.asp



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.