Hallo,
ich portiere gerade ein altes VB6 Programm nach Delphi 7.
Das Programm soll sich über
OLE mit einem laufenden anderen Programm verbinden und dort quasi "horchen".
In VB6 steht folgender Code:
Code:
Dim WithEvents App1_Sub As DefTypeLib.ApplType
Dim App1 As Object
Set App1 = GetObject("APPFX")
If App1 Is Nothing Then
MsgBox "Konnte keine Verbindung zur Anwendung aufbauen. Wurde sie gestartet?", vbOKOnly Or vbCritical
End
End If
Set App1_Sub = App1.GetSub
Set App1 = Nothing
Diesen Code hab ich im VB6 getestet, er funktioniert problemlos.
Ich hab nun schon viel im Internet gefunden, aber leider klappt schon
GetActiveOleObject('APPFX');
nicht.
An der Stelle kommt dann der Fehler "Ungültige Klassenzeichenfolge".
Ich habs auch schon mit
GetActiveOleObject('APPFX.Application');
probiert, da kommt dann "Vorgang nicht verfügbar".
GetActiveOleObject('APPFX');
will ja eigentlich den Klassennamen eines registrierten
COM-Objects, ich denke, da liegt auch der Fehler, aber ich habe keine treffendere Funktion gefunden, die das GetObject von VB6 in Delphi ersetzt.
Das VB6
hat ja den Dateinamen als Argument.
Wie stelle ich das in Delphi an?
Hier erstmal mein Code-Fragment.
Ich stelle sicher, dass die Anwendung APPFX, das ist eine Exe, die genauso, also APPFX.exe heisst, läuft. Daher rührt der Fehler also nicht.
Die TLB habe ich von Delphi erzeugen lassen, notfalls kann ich den Typ für App1_Sub aus dieser beziehen.
In vielen Beispielen aus dem Netz wurde da aber rigoros OleVariant genommen.
Delphi-Quellcode:
var
App1, App1_Sub: OleVariant;
begin
App1 := GetActiveOleObject('APPFX');
if VarIsEmpty(App1) then
ShowMessage('Konnte keine Verbindung zur Anwendung aufbauen. Wurde sie gestartet?');
App1_Sub := App1.GetScriptingEngine;
App1 := unassigned;
end;
Hat vielleicht jemand eine Idee, was ich noch anstellen muss, damit das unter Delphi genau so schön funktioniert wie mit VB6?
Danke im Voraus
Frank