|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Приветствую всех. Есть приложение, в котором для основных манипуляций нужно произвести конвертацию doc/docx в html. Для конвертации используется либа Converter.dll написанная ранее коллегами. Эта либа определяет какой файл ей пришел - doc или docx, если doc, то сама конвертирует, для docx вызывается другая либа ConverterDocx.dll. В своем приложении я использую следующий код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если на вход поступает doc, то все отрабатывает отлично, если docx, то выдается исключение: Ошибка при инициализации COM: Изменение режима для потока после его установки невозможно. У меня подозрение, что это оттого, что вызывается еще либа ConverterDocx.dll при подаче на вход docx. Из-за этих подозрений я решил подключать вторую либу аналогичным способом, чтобы не вызывать ее из первой, но столкнулся с проблемой. Как видно из кода метод конвертации в либе Converter.dll имеет вид void ConvertToHtml(string filePath), то есть с его вызовом и передачей параметра через new object[] у меня проблем не возникло. А вот в либе ConverterDocx.dll метод Convert имеет вид bool Convert(string filePath, out string htmlText). Собственно сам вопрос: Как мне воспользоваться методом в моем случае или (более глобально) как избавиться от ошибки? Заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 15:54 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
DerbaserПриветствую всех. Есть приложение, в котором для основных манипуляций нужно произвести конвертацию doc/docx в html. Для конвертации используется либа Converter.dll написанная ранее коллегами. Эта либа определяет какой файл ей пришел - doc или docx, если doc, то сама конвертирует, для docx вызывается другая либа ConverterDocx.dll. В своем приложении я использую следующий код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если на вход поступает doc, то все отрабатывает отлично, если docx, то выдается исключение: Ошибка при инициализации COM: Изменение режима для потока после его установки невозможно. У меня подозрение, что это оттого, что вызывается еще либа ConverterDocx.dll при подаче на вход docx. Из-за этих подозрений я решил подключать вторую либу аналогичным способом, чтобы не вызывать ее из первой, но столкнулся с проблемой. Как видно из кода метод конвертации в либе Converter.dll имеет вид void ConvertToHtml(string filePath), то есть с его вызовом и передачей параметра через new object[] у меня проблем не возникло. А вот в либе ConverterDocx.dll метод Convert имеет вид bool Convert(string filePath, out string htmlText). Собственно сам вопрос: Как мне воспользоваться методом в моем случае или (более глобально) как избавиться от ошибки? Заранее благодарю. а зачем ты делаешь позднее связывание, не проще ли добавить референс? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 16:09 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
convertToHtml.Invoke(converter, new object[] { strPath }); попробуй так. Код: c# 1. 2. 3. 4.
если можешь ту сборку разобрать, разбери , и сделай string вместо bool ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 16:15 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Ни референс добавить, ни, тем более, разобрать не могу, есть причины. Beg-in-er, спасибо, попробую твой способ в пн, отпишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 17:17 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Эти либы ведь вызывают word.exe, им же прочитать содержимое файла надо перед конвертацией, смотри диспетчер задач, увидишь. Файлы *.doc можно открыть, а *.docx нельзя, смотри установленную версию офиса. Обрати внимание на ошибку - word.exe не понимает расширения *.docx, следовательно не может запуститься. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 19:26 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
DerbaserНи референс добавить, ни, тем более, разобрать не могу, есть причины Озвучить причины не позволяет религия? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 21:20 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Долго и бессмысленно рассказывать о причинах, сказали так, значит надо выкручиваться на данном этапе. Word.exe не используется, либы конвертации написаны с использованием OpenOffice библиотек. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2012, 00:14 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Derbaser, надеюсь мысль понятна, не надо искать причину там где ее нет, сходи по цепочке, если либы поднимают COM и он валится на инициализации, ну, значит найти этот компонент и протестировать его на кошках. Кстати, хороший вопрос, он у тебя зарегистрирован? COM компоненту на запуск нужны права, проверяй. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2012, 03:34 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
skole, http://stackoverflow.com/questions/2438065/c-sharp-reflection-how-can-i-invoke-a-method-with-an-out-parameter Может поможет ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2012, 10:30 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
beg-in-er, спасибо, сработало! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 09:31 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
подключаю произвольную dll исходный код dll Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
код, где используется dll Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
данный код работает, но как мне теперь добраться до элементов коллекции, которую возвращает метод из dll ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 13:54 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 14:34 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Код: c# 1.
не компилируется, Using the generic type 'System.Collections.Generic.IEnumerable<T>' requires '1' type arguments Код: c# 1.
так компилируется, но ret получается равным null и все что ниже не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 15:54 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
olb, добавьте using System.Collections ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 16:03 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
olb Код: c# 1.
так компилируется, но ret получается равным null и все что ниже не работает В FW > 4.0 это будет работать, т.к. поддерживается ковариантность и контравариантность в обобщениях. По поводу просто IEnumerable ответ уже дали. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 16:22 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
cooldeveloperFW => 4.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2013, 16:23 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
этот вариант работает. А если в качестве пареметра необходимо передать коллекцию типов, описанных во внешней сборке Dll Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
вызов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
при вызове происходит исключение Невозможно преобразовать объект типа "System.Collections.Generic.List`1[System.Object]" к типу "System.Collections.Generic.List`1[MyDll.InfoRec]" Как описать этот параметр? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2013, 11:22 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
Передавай как IEnumerable, а на стороне сборке получай элемент и намапливай на экземпляр нужного типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2013, 11:27 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
cooldeveloperПередавай как IEnumerable, а на стороне сборке получай элемент и намапливай на экземпляр нужного типа. Хотя, если уж очень хочется общаться с типизированным объектом, то делай так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2013, 13:16 |
|
Вызов внешней сборки в коде C#
|
|||
---|---|---|---|
#18+
По теме: создал рецепт Передача коллекции в DLL через Assembly.LoadFile и получение результата ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2013, 13:56 |
|
|
start [/forum/topic.php?fid=20&msg=37968150&tid=1404823]: |
0ms |
get settings: |
12ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 348ms |
total: | 521ms |
0 / 0 |