Frequently Asked Questions
Installing DDObjects
I can’t install the components within Delphi 2005 Personal Edition.
Please take a look at this website which offers a solution to this problem. However, within Delphi 2005 Personal Edition the DDOWizard will not be available. Therefore I have provided a small project, which does include the wizard in a way, that you can compile and start it as standalone-executable. The project can be found within the folder Source\Delphi2005PE.
While building the packages with Delphi 5 I am getting an error L1496.
This is an internal eror caused by the Delphi linker which is frequently encountered and not specific to DDObjects. While doing a complete build will not always succeed, the best is to delete all DCU-Files before doing so. Execute the enclosed batch CleanUp.bat which does just that for you.
While building the packages Delphi complains about a missing entrypoint.
Probably you alreday do have an older version of the package installed. You can ignore the error but don’t forget to re-install the components afterwards.
When I try to install the components Delphi notifies me that the package DDObjects.bpl can not be found.
The design time package tries to load the package DDObjects.bpl but fails to do so. Check your searchpath and make sure, the package in answer can be found: either do put it into the same folder (which is Delphi’s default-setting) or make sure your searchpath does reflect the folder where the package resides.
While building the packages or demos with Delphi 5, the compiler tells me that unit Variants.pas is missing.
I have forgotten to exclude the unit by using the appropriate IFDEF clause. With the advent of Delphi 6 several routines which deal with variants have been moved from unit System.pas, which is automatically used by any unit, to Variants.pas. You can safely remove the unit from the uses-clauses and recompile.
When running the demo/wizard in Delphi 5 it does complain about a property called “Designsize”.
Shame on me, I have forgotten to check the DFM-files before releasing the build you are using. Delphi 7 does include them within those files. While that property didn’t exist in Delphi 5, the DFM can not be read. You can open the appropiate DFM-file, locate the lines and safely remove them to fix the problem.
About DDObjects
What’s the difference between remote calls, callbacks, asynchronous calls and asynchronous callbacks?
Remote calls are blocking calls initiated by the client. The client waits until it receives the result by the server. Asynchronous calls are also initiated by the client. In contrast to remote calls the client won’t wait but an appropiate event will be triggered within the client. Callbacks are blocking calls initiated by the server which offers an subscribe/unsubscribe mechanism to clients. Asynchronous callbacks are almost identical to callbacks but won’t wait for the client. Instead, as it’s the case with asynchronous calls, an appropiate event will be triggered as soon as the server receives the client’s result.
What are stateful and stateless objects?
Stateful objects are associated to a client. The first time a client invokes a method of an object, a new instance will be created. Following calls will be handled by this object; it’s exclusevely used by that specific client. As a result of that, the object can track these calls and keep relevant information in it’s private fields; it does have a “state”. In contrast to this, stateless objects are created and destroyed on demand; neither the number of objects can be predicted nor is there any guarantee, which object will execute the clients request.
Programming with DDObjects
All data is being send over the wire in plain text. Is there any way to encrypt/decrypt the data?
Yes, there is. Although DDObjects doesn’t contain any algorithms for encryption/decryption on it’s own, the DDORequester as well as the DDOListener both offer a suitable event: OnDataEvent. You can attach an eventhandler to it, which receives the XML which is about to be transferred eg. has been received and encrypt/decrypt it. Be aware that, in order not to block other threads and events, these events are not being synchronized with the mainthread.
I did not see any “compression” references. Is there a way to compress the data flowing from server-to-client
and client-to-server?
Yes, there is. Check the answer to the question above (“data being send in plain text”). The same event can be used to compress and decompress the data.
Can I develop using DDObjects on a Windows 98SE PC?
There’s one critical API call which won’t succeed in Windows 98 – TryEnterCriticalSection (it’s only an empty stub on that OS). To make a long story short: you can develop using DDObjects on Windows 98 but running server applications on that OS is not advisable! You can work around this issue by setting the property ClientAccess of TDDOListener to caSerialized. Using this value all client calls will be queued and serialized. Of course, the performance will suffer significantly so this setting should be avoided in production systems.
General Questions
I have encountered a bug.
Please send me a description of the problem and, if possible, some sourcecode which does expose it. I’ll let you know whether I have been able to reproduce it and try to fix it within the next build. In case it’s a basic functionality failure, the bug will be published on the website and handled with high priority so you and other users can track when it’s fixed.
I do have a suggestion.
Great. Please let me know about it and share your thoughts. If it does fit within the concept I’ll try to include it within one of the next builds.