ADS-OCX Einschränkungen in Delphi-Anwendungen
Delphi's Memory Manager
In der AdsOcx Applikation müssen Sie sicherstellen daß die Systemvariable: IsMultiThread auf jeden Fall auf True gesetzt ist. Der Memory Manager ist "thread-safe" nur wenn diese Variable gesetzt ist. Nur dann werden auch die Zugriffe auf gemeinsame Resourcen verriegelt. Oft setzt der Memory Manager von Delphi diese Variable nicht wenn eine eingebundene DLL oder ein Control eigene Threads startet.
Fügen Sie folgende Zeile in die initialization section ihrer Applikation:
Initialization
IsMultiThread := True;// Setting this system variable makes Delphi's memory manager thread-safe
Methoden/Eigenschaften
Folgende Eigenschaften, Methoden und Ereignisse verursachen Fehler in Delphi-Applikationen und dürfen nicht benutzt werden. Wie aus der Tabelle zu sehen ist, sollte die neueste Version von Delphi benutzt werden oder es muss auf einige Funktionalitäten verzichtet werden. Zu den aufgeführten Delphi-Versionen gibt es verschiedene Updates, die möglicherweise einige Fehler beheben.
| Fehlerbeschreibung | Workaround | Delphi-Version | |||
---|---|---|---|---|---|---|
Eigenschaften |
|
| 3.0 | 4.0 | 5.0 | 6.0 |
AdsClientType | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsClientAdsState | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsClientAdsControl | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsServerAdsControl | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsServerAdsState | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsServerType | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsServerLastMessage | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsAmsClientNetId | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
AdsAmsServerNetId | Beim Zugriff auf die Eigenschaft entsteht Memory-Leak. Speicher für den zurückgelieferten String wird nicht korrekt zurückgegeben. | n/a | Bug | ? | Fixed |
|
Methoden |
|
|
|
|
|
|
Alle Methoden | Die Funktionen der generierten Typbibliothek ADSOCXLib_TLB liefern undefinierte Rückgabeparameter. | Bitte installieren Sie den Delpphi 6 Update Pack 2 und binden Sie das ADSOCX neu ein. | - | - | kein Bug | Bug |
AdsSyncReadReq AdsSyncWriteReq | Mit diesen Methoden können Variablen vom beliebigen Typ in die SPS übertragen oder aus der SPS gelesen werden. Die OleVariant-Parameter werden aber bei der AdsSyncReadReq-Methode per Wert und nicht per Reference übergeben. D.h. während des Aufrufs kann der Wert des data-Parameters von der Methode nicht geändert werden. Während des Aufrufs werden die SPS-Variablen zwar in eine entsprechende OleVariant-Variable hineinkopiert, die Variable ist aber nur eine Kopie der Variablen aus der aktuellen Parameterliste. Die Methoden-Prototypen für das ADS-OCX werden von der Delphi-Entwicklungsumgebung beim Einbinden des ADS-OCX automatisch generiert und können nicht beinflußt werden. | Benutzen Sie die "aufgelösten" Methoden um auf die SPS-Variablen synchron zuzugreifen (z. B. AdsSyncReadIntegerReq() u.s.w. ). | Bug | ? | Bug |
|
AdsReadVarConnectEx | Ähnlich wie bei den AdsSync-Methoden, werden die OleVariant-Parameter in den Ereignisfunktionen per Wert und nicht per Referenz übergeben. | Benutzen Sie die Methode AdsReadVarConnectEx2 | Bug | ? | Bug |
|
Ereignisse |
|
|
|
|
|
|
AdsReadConnectUpdateEx | Beim Aufrufen der Ereignisfunktion wird eine Zugriffsverletzung generiert. | Benutzen Sie die Ereignisfunktion AdsReadConnectUpdateEx2 | Bug | ? | Bug |
|