Autor Beitrag
Fortunator_1
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 20.07.07 11:08 
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 . . .

ausblenden 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 :

ausblenden 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Fortunator_1 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: 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?

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Fortunator_1 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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