2012-01-12 3 views
2

Привет Я использую interop для вызова кода C# в Delphi. Код C# имеет двоичный код и в Delphi 5 Меню: Проект -> Библиотека типа импорта Нажмите Добавить, чтобы добавить файл tlb: XXXX.tlb Имя элемента устройства: введите путь, в котором создается файл delphi XXX_TLB.pas.Как сохранить сгенерированный файл TLB аккуратным?

Если C# dll, tlb и delphi XXX_TLB.pas уже есть. Теперь я добавляю еще одну функцию в код C# и надеюсь, что Delphi также может вызвать эту функцию. Мне нужно перекомпилировать C# и восстановить файл delphi XXX_TLB.pas. Но, следуя приведенным выше шагам, я вижу, что недавно созданная XXX_TLB.pas включает мою недавно добавленную функцию, но выглядит так, как порядок функций в XXX_TLB.pas полностью отличается от предыдущего.

Например, в моем двоичном коде C# у меня есть функция: func1(); func2(); func3(); func4(); // недавно добавлен

В старом XXX_TLB.pas порядок функций: func1(); func2(); func3(); Теперь XXX_TLB.pas выглядит следующим образом: func1(); func3(); func4(); func2();

XXX_TLB.pas все еще можно использовать, не имеет никакой разницы в функциональности, но когда я регистрируюсь в tfs, я вижу, что он сильно меняется из проницаемой версии. Есть ли способ сохранить этот новый XXX_TLB.pas тот же порядок, что и раньше, но добавить мою функцию? Как это сделать? Благодаря!

+0

Я надеюсь, что это просто переопределенные оболочки класса. Это не должно происходить с интерфейсами COM, поскольку это изменяет жизнеспособный порядок. –

ответ

2

Вы не можете надеяться сохранить изменения до минимума, если вы сами не начнете писать файл .pas. Это звучит как худший вариант.

Возможно, что произошло то, что вы изменили версию одного из ваших компиляторов с момента последнего импортирования. В противном случае можно было бы ожидать минимальных различий.

Просто проверьте его с комментарием о том, какие версии компилятора и .ocx/.dll были использованы.

+0

Старый файл создается в системе XP, и теперь у меня есть только окна 7. Так вы думаете, что это может быть причиной? – spspli

+0

Я бы подумал, что различия в версиях компилятора будут более вероятны для объяснения различий в выходе импортера typelib. ОС не имеет значения. –

+0

У меня был аналогичный случай, когда старые и новые файлы TLB.pas значительно отличались в своем заказе (даже классы перемещаются). Я не изменил ни компилятор, ни версию ОС. Вероятно, это некоторые детали реализации импортера, которые использует Delphi. –

2

Вы не можете, насколько я знаю. В большинстве случаев я могу рассматривать их как своего рода «черный ящик», и только изредка приходится заглядывать в них, чтобы найти конкретную декларацию.

Смежные вопросы