Entwickler-Ecke

Sonstiges (Delphi) - Übersetzung von VB nach Delphi


Fortunator_1 - Fr 20.07.07 11:08
Titel: Übersetzung von VB nach Delphi
Hi Leute, ich hab ein kleines Problem.

wir setzen viele Produkte einer großen deutschen Automatisierungsfirma ein, welche
auch Programmbeispiele zur Ansteuerung ihrer Produkte mitliefert, aber leider nur in VB und V-C++.
Wir Programmieren aber in Delphi, also muss ich diese Programme, oder teile davon nach Delphi übersetzen.

An folgenden VB-Code beiße ich mir z.Zeit die Zähne aus . . .


Quelltext
1:
2:
3:
 Set objFileNode = GetObject("MC://domain/HD/mpf.dir/"
 Set objIMCFile = objFileNode
 Call objIMCFile.Create ("*.mpf", txtMPF & ".mpf", MC_CREATE_NORMAL,sourceFile)


Daraus habe ich folgenden Delphi - Code erzeugt :


Quelltext
1:
2:
3:
 objFileNode := IMCObjectDefault(GetObject('MC://domain/HD/mpf.dir/'));
 objImcFile := IMCFile(objFileNode);
 objImcFile.Create('*.mpf',txtMPF + '.mpf',MC_CREATE_NORMAL,sourceFile);


Meiner Meinung nach ist meine Fehler die Übersetzung der Virtual Basic Funktion "GetObject".
Ich benutze dafür in Delphi folgende Funktion :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function GetObject(Name : String): IDispatch;
 var
   Moniker : IMoniker;
   Eaten : Integer;
   BindContext : IBindCtx;
   Dispatch : IDispatch;
 begin
   OleCheck(CreateBindCtx(0, BindContext));
   OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(Name)), Eaten, Moniker));
   OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch, Dispatch));
   Result := Dispatch;
 end;


Beim Ausführen bekomme ich in der 2. Zeile der Funktion "GetObject" nach einiger Zeit einen "EOleSysError".
Ist vielleicht die Delphi - Entsprechung der VB-Funktion "GetObject" falsch ? Mit welcher Delphi Funktion kann man
das sonst übersetzen ?

Vielen Dank bereits im Vorraus für Eure Hilfe. . .

Bernd

Moderiert von user profile iconChristian S.: Code- und Delphi-Tags hinzugefügt


BenBE - Sa 21.07.07 14:37

Hast Du schon einmal die Nutzung der Delphi-Function CreateOleObject versucht?

Bin bei OLE nicht eingearbeitet, aber unter Delphi ist mir das mit CreateOleObject \ GetOLEObject geläufiger.


Fortunator_1 - Mo 23.07.07 10:37

Hi BenBe,

CreateOleObject habe ich schon probiert :

objFileNode := IMCObjectDefault(CreateOleObject( 'MC://domain/HD/mpf.dir/'));

Allerdings wird hier diese Zeile gar nicht ausgeführt, es geschieht sogleich ein Fehler EOleSysError -
Ungültige Klassenzeichenfolge.
Mit GetObject wird der Datenhaltungsserver (dhserver.exe) gestartet, wie in der Dokumentation beschrieben,
ein EOleSysError tritt nach kurzer Zeit (20 sec) trotzdem auf.


ene - Mo 23.07.07 10:56

Hi,

mit GetObject wird eine Instanz verwendet und nicht erstellt. Dafür braucht man CreateObject und eigentlich nimmt man immer ein GetObject OnError CreateObject Konstrukt, damit die Anwendung startet. Ist die Anwendung denn gestartet?


Fortunator_1 - Fr 03.08.07 16:17

Hi,

ich will aber doch ein Object auf 'MC://domain/HD/mpf.dir/', also auf einen String erzeugen.
Das GetObject von Delphi verlangt aber einen Parameter vom Typ HGDIOBJ und hat außerdem etwas mit
Grafikobjekten zu tun.

Gruß Bernd