Системное арифметическое исключение: Delphi вызывает C # DLL через оболочку C ++ / CLI

2

У меня есть DLL С#, которая использует класс XslCompiledTransform для манипуляций с xml. Я украл С++/CLI-оболочку для С# DLL.

При использовании Delphi 5 для реализации оболочки С++/CLI я получаю системную арифметическую ошибку. Вот объявление Delphi 5:

procedure XsltMethod(XmlPath, XsltPath: PWideChar); cdecl; external 'ahma.dll';

Тело открытого метода С# создает новый объект XslCompiledTransform, и исключение появляется сразу, когда вновь созданный объект использует свой метод load. Например:

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XsltFile);

Как упоминалось ранее, исключение, выведенное из .NET DLL, представляет собой системное арифметическое исключение. Это происходит только при вызове из исполняемого файла Delphi.

Я думаю, я должен упомянуть, что вызов метода load снова работает отлично. Таким образом, перехват исключения и запуск метода для второго "прохода" действует как блокировщик всплывающих окон. Но для исключений, конечно.

  • 0
    Не могу придраться к посту за недостаточную детализацию, это точно. На самом деле это может помочь немного кодировать вещи и поместить все, кроме коротких фрагментов, в файлы, которые вам нравятся. Могло бы заставить больше людей читать это таким образом.
  • 0
    Ха! Да, я нуб. Спасибо за терпение со мной :)
Теги:
c++-cli
interop
pointer-arithmetic

2 ответа

2
Лучший ответ

Возможно, вы страдаете от различий в регистре управления плавающей запятой, как указано здесь. Также см. этот отчет о QC. Вы можете попробовать позвонить Set8087CW ($ 133F); в вашей программе Delphi. Будьте осторожны с проблемами с плавающей запятой в вашем коде Delphi.

2

Случайные мысли:

  • Я думаю, вам стоит начать с отладки сборки из Visual Studio. Вставьте сообщение или другое выражение ожидания в код Delphi, затем присоединитесь к процессу из Visual Studio. Трассировка С# может дать пару подсказок о том, что происходит неправильно. Если вы не можете заставить его работать, по крайней мере, добавьте регистрацию входящих параметров.
  • В delphi вам не нужно скрывать обратную косую черту.
  • Вы уверены, что E0434F4D не является невинным исключением из первого шанса? Если вы не отлаживаете (или продолжаете из остановки исключения отладчика JIT, что я не совсем уверен в Delphi 5), действительно ли поведение действительно ошибочно?
  • Можем ли мы ссылаться на "родную сборку Win32" как на "DLL", как мы называли их в течение последних 20 лет?:-)
  • 2
    +1 за комментарий "родная сборка Win32". Мы знаем, что такое «сборка», и это самая далекая вещь из управляемого кода, которую вы можете найти. :П
  • 0
    У меня есть три слова для вас: Ctrl. чередующийся с. Отладка Delphi не была бы такой же без нее. : D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню