Как передать и эхо-сигналы и от DLL?

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

7
задан DelphiProgrammer 4 November 2009 в 20:59
поделиться

4 ответа

The BEST way is to use a COM wrapper as suggested by skamradt.

It is possible, but not a good idea to pass object references as pointers to DLL's. Refer particularly to Peter Haas's comments.

If you do pass an object from a Delphi DLL to a Delphi app you will have the following problems:

You must use the same version of Delphi for the app and DLL.

Both app and DLL MUST have the same implementation of the object - or at least identical layout of all fields in the class - OK if you are using standard objects such as TStringList.

You should use shared memory or runtime packages, otherwise you will get weird access violations.

I have had to maintain code where this was done - it was nightmarish as you couldn't change classes without a lot of re-compiling.

2
ответ дан 7 December 2019 в 10:03
поделиться

I prefer to apply COM to such a model, which allows you to create external "objects" which you then can direct from within your application. Creating COM objects in Delphi is extremely simple, use your ActiveX creation methods to create an ActiveX library and then create COM objects. You then use the interface unit in your main application, and when you CoCreate an instance of the object it loads the appropriate DLL. The only tricky part of this is that your com objects must be registered on the system to function properly... which in the Win7/Vista world requires elevated access... although once this is done, it is seamless.

2
ответ дан 7 December 2019 в 10:03
поделиться

Вы можете использовать интерфейсы, и большинство ваших проблем, включая версии компилятора / rtl или даже другие языки, просто исчезнут. Интерфейсы Delphi всегда совместимы с IUnknown, что делает их совместимыми с большинством языков с поддержкой объектно-ориентированного программирования в Windows.

Однако следует помнить одну вещь: не используйте AnyString, придерживайтесь WideString, который является типом String, используемым COM .

2
ответ дан 7 December 2019 в 10:03
поделиться

Независимым от платформы и языка способом может быть обмен сериализованными объектами.

Это влияет на производительность, но имеет и преимущества: DLL работает без изменений с другими языками и платформами, например .Net или Java (через JNA Java Native Access) . Он не зависит от каких-либо специальных функций операционной системы, поэтому его также можно использовать в Linux или MacOS, если вы скомпилируете библиотеку с помощью Free Pascal .

Для сериализации вы можете использовать JSON или XML. Существуют библиотеки с открытым исходным кодом для Delphi, например SuperObject и OmniXML .

0
ответ дан 7 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: