AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Portierung VB --> Delphi, GetObject

Ein Thema von franky.f · begonnen am 23. Sep 2008 · letzter Beitrag vom 24. Sep 2008
Antwort Antwort
franky.f

Registriert seit: 29. Jul 2008
8 Beiträge
 
#1

Portierung VB --> Delphi, GetObject

  Alt 23. Sep 2008, 11:27
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
Code:
GetObject
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Portierung VB --> Delphi, GetObject

  Alt 23. Sep 2008, 11:38
Was stehen denn in der TLB so für Deklartaionen drin.

Edit: Interface und CoClass (mit dem Namen der Anwendung) wäre spannend.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Portierung VB --> Delphi, GetObject

  Alt 23. Sep 2008, 11:57
Will dir nicht den Mut nehmen aber vergess es einfach
Habe schon versucht einige Projekte von VB nach Delphi zu übersetzen bin aber kläglich gescheitert.

Besonders dann wenn man versucht es 1 zu 1 umzusetzen.
Kann sein das ich aber auch zu blöd dafür bin.

gruss Emil
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Portierung VB --> Delphi, GetObject

  Alt 23. Sep 2008, 17:00
Delphi-Quellcode:
function VBGetObject(const Filename: string; const ClassName: string = ''): IDispatch;
var
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  if ClassName <> 'then
    Result := GetActiveOleObject(ClassName)
  else
  begin
    OleCheck(GetClassFile(PChar(Filename), ClassID));
    OleCheck(GetActiveObject(ClassID, nil, Unknown));
    OleCheck(Unknown.QueryInterface(IDispatch, Result));
  end;
end;
Das wäre die Implementierung der VB GetObject Funktion. Das "APPFX" ist der Dateiname und nicht der Klassenname, da die VB Funktion zwei Parameter hat und der erste den Dateinamen angibt.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Portierung VB --> Delphi, GetObject

  Alt 23. Sep 2008, 19:10
Zitat von EWeiss:
Will dir nicht den Mut nehmen aber vergess es einfach
Habe schon versucht einige Projekte von VB nach Delphi zu übersetzen bin aber kläglich gescheitert.
Ich habe jetzt wieder eine COM-DLL eingebunden, wo das SDK netterweise für VB geschrieben war.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
franky.f

Registriert seit: 29. Jul 2008
8 Beiträge
 
#6

Re: Portierung VB --> Delphi, GetObject

  Alt 24. Sep 2008, 09:31
Zitat von jbg:
Das wäre die Implementierung der VB GetObject Funktion. Das "APPFX" ist der Dateiname und nicht der Klassenname, da die VB Funktion zwei Parameter hat und der erste den Dateinamen angibt.
Hallo,
Danke für die Antwort, leider funktioniert das noch nicht.

Delphi-Quellcode:
function VBGetObject(const Filename: Widestring; const ClassName: string = ''): IDispatch;
var
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  if ClassName <> 'then
    Result := GetActiveOleObject(ClassName)
  else
  begin
    OleCheck(GetClassFile(PWideChar(Filename), ClassID));
    OleCheck(GetActiveObject(ClassID, nil, Unknown));
    OleCheck(Unknown.QueryInterface(IDispatch, Result));
  end;
end;
Ich habe String und PChar jeweils durch die Wide-Variante ersetzt, dann meckerte Delphi nicht mehr.
Bei GetClassFile steigt er dann aus mit der Meldung "Datei konnte durch Moniker nicht geöffnet werden."
APPFX ist eine exe, vielleicht liegt es daran?
Wenn ich ihm den ganzen Pfad, also "C:\Programme\AppFX\APPFX.exe" serviere, dann kommt die Fehlermeldung "Ungültige Dateierweiterung".
APPFX lief bei meinen Versuchen.

Wie macht VB6 das nur, da funktioniert es ja?

Gruß
Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz